10

在 Python 3 中,我有一个包含 6,041 页的 PDF 文件“Ativos_Fevereiro_2018_servidores_rj.pdf”。我在一台装有 Ubuntu 的机器上

在每一页的顶部都有文本,两行。在一个表格下方,带有标题和两列。每张表36行,最后一页少

在每一页的最后,表格之后,还有一行文字

我想从这个 PDF 创建一个 CSV,只考虑页面中的表格。并忽略表格前后的文字

最初我测试了 tabula-py。但它会生成一个空文件:

from tabula import convert_into

convert_into("Ativos_Fevereiro_2018_servidores_rj.pdf", "test_s.csv", output_format="csv")

请问,有没有人知道另一种使用 tabula-py 来满足这种需求的方法?

或者以这种文件类型将 PDF 转换为 CSV 的另一种方法?

4

2 回答 2

12

好的,我发现了问题:您必须设置spreadsheet=True并保持 utf-8 编码:

df = tabula.read_pdf("Ativos_Fevereiro_2018_servidores_rj.pdf", encoding='utf-8', spreadsheet=True, pages='1-6041')

在下图中,我仅使用第一页对其进行了测试(因为您的文件很大):

在此处输入图像描述

之后您可以将 DataFrame 保存为 csv:

df.to_csv('otuput.csv', encoding='utf-8')

编辑:

好的,错误可能是 java 内存问题。为了让它更快,我添加了该pages选项。还有一个编码问题,所以encoding='utf-8'添加到 csv 导出中。如果您一直遇到 java 错误,请尝试分块解析它,例如pages='1-300'. 我刚刚完成了所有 6041(在 64GB RAM 机器上),它运行良好。

于 2018-03-29T18:07:43.157 回答
0

使用 tabula-py 将 PDF 转换为 CSV

from tabula import convert_into
table_file = r"ActualPathtoPDF"
output_csv = r"DestinationDirectory/file.csv"
df = convert_into(table_file, output_csv, output_format='csv', lattice=True, stream=False, pages="all")
于 2021-11-25T06:40:25.103 回答