Python 提取PDF页码转换为列表时输出None的问题咨询
错误原因
list.append()是原地修改方法,本身没有返回值,默认返回None,所以你直接打印num_pages.append(dc)自然会输出None- 你只在遍历页码的for循环结束后才执行了一次append,此时
dc已经被覆盖为最后一个页码的值,前面的289到292都没有被加入列表 - 后缀判断逻辑错误:
if '.pdf' or '.PDF' in i的写法永远返回True,因为or运算符左侧的'.pdf'属于非空字符串,布尔值为True,会直接触发判断,不管文件是不是pdf格式 - 打开pdf文件后先执行了一次
PDFPage.get_pages读取了全部内容,文件指针已经移动到文件末尾,后续再创建PDFParser解析时可能出现读取异常 - 路径拼接直接用字符串相加可能出现斜杠缺失/重复的问题,建议用
os.path.join处理
修正后代码
import os from pdfminer.pdfpage import PDFPage from pdfminer.pdfparser import PDFParser from pdfminer.pdfdocument import PDFDocument # 保留你原有的page_interpreter相关导入即可 allmypdfs = [] files = [] num_pages = [] # 保留你原有定义的folders列表即可 for folder in folders: alllfiles = os.listdir(folder) firstpdfs = "" for i in alllfiles: # 修正pdf后缀判断逻辑 if i.lower().endswith('.pdf'): firstpdfs = i print('PDF-Names--', firstpdfs) files.append(firstpdfs) break # 修正路径拼接逻辑 pdf_path = os.path.join(folder, firstpdfs) with open(pdf_path, 'rb') as fh: parser = PDFParser(fh) document = PDFDocument(parser) # 遍历页码时直接添加到列表 for pages, pdfObjects in enumerate(PDFPage.create_pages(document)): dc = pages + 1 print(dc) num_pages.append(dc) # 如果之前的page_interpreter处理是必要逻辑,放开下方注释重置文件指针后再执行 # fh.seek(0) # for page in PDFPage.get_pages(fh, caching=True, check_extractable=True): # page_interpreter.process_page(page) # 其余原有代码保留 # 直接打印完整列表即可得到预期输出 print('HEYY', num_pages)
内容的提问来源于stack exchange,提问作者technophile_3
相关产品推荐
相关产品推荐

