【问题标题】:looping through pdf files with tabulizer in python在python中使用制表器循环pdf文件
【发布时间】:2017-11-11 20:43:51
【问题描述】:

我很难让一段代码工作。我想遍历文件夹中的 pdf 文件,提取 tabula 包认为的表格是什么,将它们提取到数据框中,然后将特定 pdf 中的所有表格写入一个 csv 文件。

我查看了this post(和其他几个),但我仍然无法让它工作。似乎脚本循环遍历文件,提取一些表,但它似乎没有遍历文件,我无法让它将所有数据帧写入 csv 文件。该脚本只是在 csv 中写入最后一个。

这是我目前所拥有的。任何帮助将不胜感激,特别是如何正确循环文件并将所有表格从一个 pdf 写入一个 csv 文件。我被困住了......

pdf_folder = 'C:\\PDF extract\\pdf\\'
csv_folder = 'C:\\PDF extract\\csv\\'  

    paths = [pdf_folder + fn for fn in os.listdir(pdf_folder) if fn.endswith('.pdf')]
    for path in paths:
        listdf = tabula.read_pdf(path, encoding = 'latin1', pages = 'all', nospreadsheet = True,multiple_tables=True)
        path = path.replace('pdf', 'csv')
        for df in listdf: (df.to_csv(path, index = False))  

【问题讨论】:

  • 你不应该在某处使用csv_folder吗?

标签: python pdf extraction tabula


【解决方案1】:

就像@Scott Hunter 提到的,你没有使用 CSV_folder

另外,我认为您正在覆盖创建的 .csv 文件:

for df in listdf: (df.to_csv(path, index = False))

对于 for 循环的每次迭代,路径变量保持不变。

编辑: 你可能应该尝试做这样的事情:

pdf_folder = 'C:\\PDF extract\\pdf\\'
paths = [pdf_folder + fn for fn in os.listdir(pdf_folder) if fn.endswith('.pdf')]

for path in paths:
    listdf = tabula.read_pdf(path, encoding = 'latin1', pages = 'all', nospreadsheet = True,multiple_tables=True)
    path = path.replace('pdf', 'csv')
    df_concat = pd.concat(listdf)
    df_concat.to_csv(path, index = False)

【讨论】:

  • 因为它们都来自同一个PDF;可能意味着将每个添加到文件中,但正如您所说,而是覆盖。
  • 谢谢,这似乎确实有效。不幸的是,Tabula 不是很准确(或能够)从非表格中识别表格(在科学论文中)。 Tabula 将很多常规文本放入表格中。但它似乎并没有错过桌子。因此,手动编辑仍然是有序的。所以我现在用excel代替csv,这样更容易操作。
猜你喜欢
  • 1970-01-01
  • 2011-05-15
  • 2022-11-08
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
相关资源
最近更新 更多