You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:46:37