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

如何在tabula-py中设置页码范围?Ubuntu下Python3 PDF转CSV需求

处理大PDF转CSV的Python方案(Ubuntu+Python3)

嗨,针对你这个6041页的PDF转CSV需求,我推荐用pdfplumber库来实现——它比PyPDF2这类工具对表格的识别精度更高,尤其适合你这种每页固定结构的文档。下面是具体步骤:

1. 安装依赖

首先确保你的Ubuntu环境有Python3和pip,然后安装pdfplumber:

# 更新系统包并安装pip3
sudo apt update && sudo apt install python3-pip -y
# 安装pdfplumber
pip3 install pdfplumber

2. 编写处理脚本

创建一个Python脚本(比如pdf_to_csv.py),代码如下,我加了详细注释方便你理解:

import pdfplumber
import csv

# 配置文件路径
PDF_FILE = "Ativos_Fevereiro_2018_servidores.pdf"
OUTPUT_CSV = "ativos_fevereiro_2018.csv"

def main():
    with open(OUTPUT_CSV, 'w', newline='', encoding='utf-8') as csv_out:
        writer = csv.writer(csv_out)
        header_written = False  # 标记是否已写入表头(避免重复写入每页的表头)

        # 打开PDF文件
        with pdfplumber.open(PDF_FILE) as pdf:
            total_pages = len(pdf.pages)
            print(f"开始处理,共 {total_pages} 页...")

            for page_idx, page in enumerate(pdf.pages, start=1):
                print(f"正在处理第 {page_idx}/{total_pages} 页")

                # 提取当前页的表格数据
                # 用lines参数确保识别表格线,提升精度
                table = page.extract_table(table_settings={
                    "vertical_strategy": "lines",
                    "horizontal_strategy": "lines"
                })

                if not table:
                    print(f"警告:第 {page_idx} 页未识别到表格,跳过")
                    continue

                # 处理表头:仅第一页写入表头
                if not header_written:
                    writer.writerow(table[0])
                    header_written = True
                    # 第一页的数据行是table[1:](跳过表头)
                    writer.writerows(table[1:])
                else:
                    # 后续页面跳过自带的表头,直接写入数据行
                    writer.writerows(table[1:])

        print(f"处理完成!CSV文件已保存到 {OUTPUT_CSV}")

if __name__ == "__main__":
    main()

3. 运行脚本

在终端执行:

python3 pdf_to_csv.py

注意事项

  • 表格识别精度:如果某些页面的表格识别有问题,可以调整table_settings的参数,比如把vertical_strategy改成text(适合无表格线的情况),具体可以参考pdfplumber的官方文档。
  • 性能:6000多页的PDF处理大概需要5-10分钟(取决于你的机器性能),请耐心等待。
  • 编码问题:脚本用了utf-8编码保存CSV,能避免大部分乱码问题,如果仍有乱码,可以尝试换成latin-1编码(适合葡萄牙语等拉丁系语言文档)。
  • 异常处理:如果个别页面出现错误,可以在代码中添加try-except块跳过异常页,避免整个脚本中断。

内容的提问来源于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 07:14:22