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
相关产品推荐
相关产品推荐

