Python实现PDF转CSV时列内容错位问题的修复指导请求
修复PDF转CSV的列错位问题
列错位的核心原因是tabula依赖的列分隔坐标(columns参数)与当前PDF实际内容的列位置不匹配,另外你手动删除第5列的操作也可能打乱列对应关系。以下是具体修复步骤:
重新校准列分隔坐标
tabula的columns参数是按PDF页面的横坐标(从左到右)定义列分割线的位置,之前的坐标可能因为PDF内容排版变化失效了:- 可以运行
tabula.gui()打开可视化工具,加载目标PDF后手动拖曳列分割线,复制生成的坐标替换到代码中。 - 若不用GUI,可通过PDF阅读器(如Adobe Acrobat)查看元素横坐标,对应调整
columns列表内的数值。
- 可以运行
验证列删除操作的合理性
代码中df1[0]=df1[0].drop(columns=5)是固定删除第5列(索引从0开始),但如果PDF列结构已变化,这个操作可能误删正确列:- 先注释掉该行代码,运行后查看原始DataFrame的列数和内容,确认是否真的存在多余列。
- 若确实需要删除,要根据当前列的实际内容确定删除索引,而非固定使用5。
修复后的示例代码
#!/usr/bin/env python3 import tabula import pandas as pd pdf_file='/pdf2xls/Input.pdf' column_names=['Product','Batch No','Machin No','Time','Date','Drum/Bag No','Tare Wt.kg','Gross Wt.kg', 'Net Wt.kg','Blender','Remarks','Operator'] # 替换为重新校准后的列分隔坐标(需根据实际PDF调整) df1 = tabula.read_pdf(pdf_file, pages=1, area=(95,20, 800, 840), columns=[90, 175, 215, 250, 305, 312, 330, 365, 408, 448, 478, 518], pandas_options={'header': None}) # 先打印查看原始列内容,确认是否需要删除列 # print(df1[0].head()) # 确认需要删除的列索引后再执行,示例为保留原删除逻辑,可根据实际情况调整 # df1[0] = df1[0].drop(columns=5) df1[0].columns = column_names result = pd.DataFrame(df1[0]) # 加上index=False避免生成多余的索引列 result.to_csv("/pdf2xls/Input.csv", index=False)
- 额外检查点
- 确认目标PDF是否有版本更新或排版修改,这是坐标失效的常见诱因。
- 导出CSV时添加
index=False,避免将DataFrame的索引列写入文件,减少不必要的干扰。
内容的提问来源于stack exchange,提问作者linux01
相关产品推荐
相关产品推荐

