在Python 3中,我有一个PDF文件“Ativos_Fevereiro_2018_servidores_rj.pdf”,共有6,041页。我在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的另一种方法是什么?
答案 0 :(得分:4)
好的,我发现了问题:你必须设置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机器上),它工作正常。