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

Python3.6.3用pdfminer.six批量转PDF为TXT遇模块及脚本执行错误求助

解决pdfminer.six批量转换PDF到TXT的两类常见错误

我来帮你逐个拆解这两个问题,都是用pdfminer.six处理PDF时容易踩的坑:

一、解决「ModuleNotFoundError: No module named 'pdfminer'」错误

你已经安装了pdfminer.six,但代码还是报错找不到pdfminer模块,大概率是两个原因:

1. 虚拟环境激活问题

确保你运行代码时,是在安装了pdfminer.six的那个Python3.6.3虚拟环境里。可以先执行:

# Linux/macOS激活虚拟环境(根据你的环境创建方式调整)
source your_env/bin/activate
# Windows下激活虚拟环境
your_env\Scripts\activate

激活后用pip list确认pdfminer.six确实在当前环境中,再运行你的Python脚本。

2. 代码的Python3兼容性问题

你的代码里用了Python2的file()函数,Python3已经移除了这个函数,换成open()即可。另外还有几处小细节需要修正,比如output.close要加括号变成output.close(),写入TXT时指定编码避免乱码。修正后的完整代码如下:

from io import StringIO
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
import os

# 转换单份PDF为文本字符串
def convert(fname, pages=None):
    if not pages:
        pagenums = set()
    else:
        pagenums = set(pages)
    output = StringIO()
    manager = PDFResourceManager()
    converter = TextConverter(manager, output, laparams=LAParams())
    interpreter = PDFPageInterpreter(manager, converter)
    # 替换Python2的file()为Python3的open(),用with语句自动关闭文件
    with open(fname, 'rb') as infile:
        for page in PDFPage.get_pages(infile, pagenums):
            interpreter.process_page(page)
    converter.close()
    text = output.getvalue()
    # 修正:close()需要加括号调用
    output.close()
    return text

# 批量转换目录下所有PDF到指定目录
def convertMultiple(pdfDir, txtDir):
    if pdfDir == "":
        pdfDir = os.getcwd() + "\\"
    # 确保输出目录存在,避免因目录不存在报错
    os.makedirs(txtDir, exist_ok=True)
    for pdf in os.listdir(pdfDir):
        fileExtension = pdf.split(".")[-1]
        # 小写匹配后缀,避免大小写不一致的问题
        if fileExtension.lower() == "pdf":
            # 用os.path.join拼接路径,适配不同系统的路径分隔符
            pdfFilename = os.path.join(pdfDir, pdf)
            text = convert(pdfFilename)
            textFilename = os.path.join(txtDir, f"{pdf}.txt")
            # 指定utf-8编码写入,避免中文等非ASCII字符乱码
            with open(textFilename, "w", encoding="utf-8") as textFile:
                textFile.write(text)

pdfDir = "../../data/raw/"
txtDir = "../../data/interim/"
convertMultiple(pdfDir, txtDir)

我还额外加了os.makedirs确保输出目录存在、用os.path.join避免路径拼接错误,这些都是批量处理时的实用优化。

二、解决「env: python\r: No such file or directory」错误

这个错误是换行符格式问题:你在Windows环境下安装的pdfminer.six,其中pdf2txt.py脚本的第一行shebang(#!/usr/bin/env python)带有Windows的\r换行符,在Linux/macOS的shell里,会把python\r当成一个完整的命令,自然找不到对应的程序。

解决方法有三种:

  • 方法1:直接用Python运行脚本
    不用直接执行pdf2txt.py,而是指定虚拟环境里的Python来运行:
    python pdf2txt.py filename.pdf
    # 如果虚拟环境的Python命令是python3,就用
    python3 pdf2txt.py filename.pdf
    
  • 方法2:修复脚本的换行符
    用dos2unix工具转换脚本的换行符(Linux/macOS下可以用包管理器安装):
    dos2unix $(which pdf2txt.py)
    
  • 方法3:手动修改shebang行
    用which pdf2txt.py找到脚本路径,用编辑器打开第一行,删除末尾的\r(确保第一行是#!/usr/bin/env python,没有多余的回车符)。

内容的提问来源于stack exchange,提问作者Huy Le

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:56:45