如何用tabula-py提取PDF表格生成CSV?(Python3+Ubuntu环境)
提取PDF表格生成CSV的解决方案
嘿,针对你这个6041页的PDF表格提取需求,我推荐用tabula-py来搞定——它是专门针对PDF表格提取的Python工具,对这种每页结构固定的表格适配性特别好,完全能帮你忽略掉表格前后的冗余文本。
第一步:安装依赖(Ubuntu + Python3环境)
因为tabula依赖Java环境,先确保系统里装了OpenJDK,再装Python库:
# 安装OpenJDK 8(tabula推荐版本) sudo apt-get update && sudo apt-get install openjdk-8-jdk -y # 安装Python依赖库 pip3 install tabula-py pandas
第二步:编写提取代码
下面是完整的脚本,会自动抓取所有页面的表格,去除重复的表头,最后导出成CSV:
import tabula import pandas as pd # 你的PDF文件路径 pdf_path = "Ativos_Fevereiro_2018_servidores_rj.pdf" # 读取所有页面的表格,注意设置参数: # pages='all' 处理所有页面 # multiple_tables=False 每页只有一个表格 # pandas_options={'header': 0} 把第一行作为表头 df_list = tabula.read_pdf( pdf_path, pages='all', multiple_tables=False, pandas_options={'header': 0} ) # 合并所有页面的表格数据,同时去除重复的表头行 # 因为每页都有表头,所以要过滤掉那些和表头内容完全一致的行 combined_df = pd.concat(df_list) header = combined_df.columns.tolist() combined_df = combined_df[~combined_df.apply(lambda row: row.tolist() == header, axis=1)] # 导出为CSV文件 combined_df.to_csv("extracted_table.csv", index=False, encoding='utf-8') print("表格提取完成!已保存为extracted_table.csv")
进阶优化:精准限定表格区域(可选)
如果发现偶尔会抓到表格外的文本,可以手动指定表格在页面上的坐标。你可以用tabula的GUI工具来获取坐标:
tabula --gui
打开PDF后,用鼠标框选表格区域,工具会显示对应的area参数(格式是[top, left, bottom, right]),把它加到read_pdf里:
df_list = tabula.read_pdf( pdf_path, pages='all', multiple_tables=False, pandas_options={'header': 0}, area=[50, 20, 750, 580] # 替换成你实际框选的坐标 )
测试建议
因为PDF页数太多,建议先拿前几页测试,把pages='all'改成pages='1-5',确认提取结果没问题后再跑全部页面,避免浪费时间。
内容的提问来源于stack exchange,提问作者Reinaldo Chaves
相关产品推荐
相关产品推荐

