PDF转TXT时txt.write()写入失效问题求助
解决PDF转TXT后文件空白的问题
首先,你的代码里存在几个关键问题导致TXT文件始终空白,我来一步步帮你修正:
1. 重复打开同一文件的冲突
你同时用w+和a模式打开了同一个TXT文件,创建了两个独立的文件句柄creaty和writy,这会导致文件指针混乱,甚至可能覆盖或丢失写入的内容。完全不需要同时打开两个句柄,单个句柄就能完成创建和写入操作。
2. 未正确处理文件缓冲区
Python的文件写入默认是缓冲模式,如果没有手动刷新缓冲区(flush())或者关闭文件(close()),写入的内容可能不会立即同步到磁盘,脚本结束前没做这些操作就会出现文件空白的情况。最稳妥的方式是用上下文管理器(with语句),它会自动帮你处理文件的打开和关闭,彻底避免这类问题。
修改后的完整代码
import PyPDF2 # 用with语句管理文件,自动处理打开/关闭逻辑 with open('Computer_science_paper_1__HL.pdf', 'rb') as pdfFileObj, \ open('Computer_science_paper_1__HL.txt', 'w', encoding="utf-8") as writy: pdfReader = PyPDF2.PdfFileReader(pdfFileObj) # 遍历所有页面(注意:原代码range(1, ...)会跳过第0页,即PDF第一页,可根据需求调整) for x in range(pdfReader.numPages): pageObj = pdfReader.getPage(x) result = pageObj.extractText() # 写入内容,每页后加换行分隔更易读 writy.write(result + '\n')
额外优化提示
- 如果你原本就想跳过PDF第一页,保留
range(1, pdfReader.numPages)即可;如果需要提取全部页面,改成range(pdfReader.numPages)。 - 若PyPDF2提取的文本仍然不全或空白,可能是PDF本身是扫描件(图片格式)或文本层被特殊处理,这种情况下可以尝试
pdfplumber库,它的文本提取兼容性更好:import pdfplumber with pdfplumber.open('Computer_science_paper_1__HL.pdf') as pdf, \ open('Computer_science_paper_1__HL.txt', 'w', encoding="utf-8") as writy: for page in pdf.pages: text = page.extract_text() if text: # 避免写入空内容 writy.write(text + '\n')
内容的提问来源于stack exchange,提问作者Nepheli Kardassi
相关产品推荐
相关产品推荐

