Python提取文档库所有PDF首页时遇文件定位错误求助
问题分析与解决建议
核心问题是文件路径错误:
os.listdir(directory)返回的只是Fund Docs目录里的文件名,不是完整路径。你直接用open(entry, 'rb')时,Python会在脚本当前的工作目录下找这个文件,而不是在Fund Docs目录里,所以哪怕文件名打印正确,实际找不到对应文件。
具体修复方案
1. 拼接完整文件路径
用os.path.join(directory, entry)生成文件的完整路径,确保open能定位到正确的文件位置。
2. 过滤非PDF文件
目录里可能存在文件夹、非PDF格式的文件,提前过滤掉这些内容,避免无效操作报错。
3. 添加异常处理
处理PDF读取时的常见异常(比如文件损坏、加密、无权限等),防止单个文件出错导致整个脚本中断。
修改后的代码
import os import PyPDF2 from PyPDF2 import PdfFileReader # 目标目录 directory = 'Fund Docs' entries = os.listdir(directory) for entry in entries: # 拼接完整文件路径 full_path = os.path.join(directory, entry) # 跳过文件夹,只处理PDF文件(不区分大小写) if not os.path.isfile(full_path) or not entry.lower().endswith('.pdf'): print(f"跳过非PDF文件/文件夹: {entry}") continue print(f"正在处理: {entry}") try: # 打开PDF文件(用完整路径) with open(full_path, 'rb') as pdfFileObj: pdfReader = PdfFileReader(pdfFileObj) # 检查PDF是否有页面 if pdfReader.numPages == 0: print(f"{entry} 无页面内容") continue # 提取首页文本 pageObj = pdfReader.getPage(0) text = pageObj.extractText() print("首页文本:\n", text) except PyPDF2.errors.PdfReadError: print(f"{entry} 是损坏或加密的PDF,无法读取") except Exception as e: print(f"处理 {entry} 时出错: {str(e)}")
额外说明
- 用
with open(...)代替手动close(),Python会自动处理文件关闭,避免资源泄漏。 - 加入了PDF页面检查,防止空PDF报错。
- 区分大小写的PDF后缀判断,兼容
.PDF大写后缀的文件。
内容的提问来源于stack exchange,提问作者Data_Science_Mick
相关产品推荐
相关产品推荐

