【问题标题】:How to convert PDF to CSV with tabula-py?如何使用 tabula-py 将 PDF 转换为 CSV?
【发布时间】:2018-09-08 16:08:06
【问题描述】:

在 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 的另一种方法?

【问题讨论】:

  • 试试import tabulatab = tabula.read_pdf("Ativos_Fevereiro_2018_servidores_rj.pdf", encoding='latin-1') 会抛出错误吗?如果没有,请运行print(tab)。也是空的吗?
  • 谢谢。是的,它仍然是空的(无)
  • tabula 似乎在 pdf 中找不到表格。如果没有 pdf,很难说出原因(在我的 pdf 表格上工作得很好)。也许您可以设置guess=False 并指定area 和/或columns(请参阅选项文档)或尝试pdfquery (github.com/jcushman/pdfquery) 或查看“原始字符串”可以在哪里获得您(例如使用PyPDF2 )
  • 谢谢。我正在查看文档 (github.com/chezou/tabula-py)。但是我如何找到桌子所在的区域?我的 PDF 在这里:drive.google.com/file/d/1P8kF0gUOVls6sOGed4R0C2PlVF5RFtU6/…
  • 是否需要 PDF 编辑程序来查找坐标?

标签: python csv pdf tabula


【解决方案1】:

好的,我找到了问题:你必须设置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 机器上),它运行良好。

【讨论】:

  • 谢谢!然后我尝试这样做: import pandas as pd import tabula tab = tabula.read_pdf("Ativos_Fevereiro_2018_servidores_rj.pdf", encoding='latin-1', spreadsheet=True, pages=all, header=0) tab.to_csv(' file_ready.csv', index=False)
  • 但是我遇到了这个错误:TypeError: expected str, bytes or os.PathLike object, not builtin_function_or_method
  • 是的,或者从选项中删除pages,所以:df = tabula.read_pdf("Ativos_Fevereiro_2018_servidores_rj.pdf", encoding='latin-1', spreadsheet=True)
  • 我收到此错误消息:CalledProcessError: Command '['java', '-jar', '/home/reinaldo/Documentos/Code/intercept/segranca/lib/python3.6/site- packages/tabula/tabula-1.0.1-jar-with-dependencies.jar'、'--pages'、'all'、'--guess'、'--lattice'、'Ativos_Fevereiro_2018_servidores_rj.pdf']' 返回非-零退出状态1。
  • 我编辑了我的答案。我认为 pdf 本身存在一些问题(在某些页面上)。我会运行循环看看哪个,但它在我的机器上很慢.. ;-)
【解决方案2】:

使用 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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-18
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    相关资源
    最近更新 更多