使用Anaconda Python3转PDF为CSV后文件不可读,如何处理?
解决PDF转CSV后无法读取的问题
嘿,我一眼就看到你代码里的核心问题了——你把PDF二进制文件对象直接传给pd.DataFrame()了,这完全是错误的用法!pdfFileObj是你打开文件的句柄,不是提取出来的文本内容,用它生成的CSV自然是乱码或者不可读的二进制信息。
问题根源拆解
你现在的代码里,虽然提取了第一页的文本(pageObj.extractText()),但根本没把这段有效文本用来创建DataFrame,反而用了原始的文件对象pdfFileObj,这就导致CSV里存的是文件底层的二进制数据,肯定没法正常读取。
修正方案
我们需要先正确提取PDF中的文本(多页的话要遍历所有页面),把文本整理成结构化数据,再生成DataFrame和CSV。
方案1:通用纯文本PDF转CSV
如果你的PDF是按行排列的纯文本内容,用下面的代码就能生成可读的CSV:
import PyPDF2 import pandas as pd # 别忘了导入pandas,你之前的代码里漏掉了这个 # 替换成你的PDF文件路径 path = "your_target.pdf" # 打开并读取PDF pdfFileObj = open(path, 'rb') pdfReader = PyPDF2.PdfFileReader(pdfFileObj) # 提取所有页面的文本,过滤空行并整理成列表 extracted_lines = [] for page_num in range(pdfReader.numPages): page = pdfReader.getPage(page_num) page_text = page.extractText() # 把每页文本按换行拆分,去掉空白行和首尾空格 extracted_lines.extend([line.strip() for line in page_text.split('\n') if line.strip()]) # 关闭文件句柄,避免资源占用 pdfFileObj.close() # 创建DataFrame并指定列名 df = pd.DataFrame(extracted_lines, columns=["text_content"]) # 用UTF-8编码保存CSV,确保跨平台兼容性 df.to_csv('output.csv', index=False, encoding='utf-8')
这段代码会把PDF里所有有效文本行提取出来,生成的CSV可以直接用Excel或文本编辑器正常打开。
方案2:表格类PDF转CSV
如果你的PDF里是表格内容,PyPDF2提取的文本会格式混乱,这时候用tabula-py工具更合适——它能直接识别PDF中的表格结构:
首先安装依赖工具:
pip install tabula-py
然后用下面的代码提取表格:
import tabula # 提取PDF中所有页面的表格,返回DataFrame列表 table_dfs = tabula.read_pdf(path, pages="all") # 如果提取到了表格,保存第一个表格为CSV(多表格可循环处理) if table_dfs: table_dfs[0].to_csv('output_table.csv', index=False, encoding='utf-8')
这样生成的CSV会完整保留表格的列结构,直接就能正常读取使用。
内容的提问来源于stack exchange,提问作者Jawahar
相关产品推荐
相关产品推荐

