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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:58:16