【问题标题】:How to extract data from multiple PDFs in the same directory using python-camelot?如何使用 python-camelot 从同一目录中的多个 PDF 中提取数据?
【发布时间】:2020-06-23 21:46:12
【问题描述】:

我正在尝试从多个 pdf 中的多个表中提取数据并将其保存为 csv 格式。我做了研究,发现 python-camelot 是一个很好的提取工具。我试过了,它在单个 pdf 上工作得很好。但是,我有超过 50 个相同格式的 PDF,所以我决定使用 For 循环遍历所有文件,但它不起作用,并且我得到一个错误文件在目录中找不到。你能帮忙吗?代码如下:

import tkinter 
import camelot
import os

directory = 'C:\\Users\\Alr\\Desktop\\test\\'
files = [ filename for filename in os.listdir(directory)]
for i in range (len(files)):
    tables = camelot.read_pdf(files[i], pages='5,6,7')
    tables.export(files[i], f='csv', compress=True) # json, excel, html, sqlite
    tables.to_csv(files[i]+'.csv')

【问题讨论】:

  • files 永远不会被设置为任何值。您是否忘记读取文件夹?
  • @usr2564301 谢谢你的重播。我忘了包括 - 刚刚更新了代码
  • 现在问题很清楚了——唉,这是一个常见的错误。 os.listdir 返回文件名,这意味着不包括路径。只需在 read_pdf 中的文件名前加上 directory 即可。
  • @usr2564301 非常感谢您,我认为您是对的,在我将路径添加到名称后它就可以工作了。但是,我在导出它时遇到问题,因为我使用文件名作为 csv 文件的名称,但它在名称中包含“.pdf”,现在代码出现错误。那么有什么方法可以从名称中取出 .csv 并使用文件名

标签: python pdf-scraping python-camelot


【解决方案1】:

正如 cmets 中所建议的,问题在于 os.listdir 只返回文件名而不是完整路径。

你可以试试这个:

import tkinter 
import camelot
import glob

directory = 'C:\\Users\\Alr\\Desktop\\test\\*.pdf'
files = [filename for filename in glob.glob(directory)]

for pdf_filepath in files:
    csv_filepath=pdf_filepath.replace('.pdf','.csv')
    tables = camelot.read_pdf(pdf_filepath, pages='5,6,7')

    # the following lines seem to be duplicate
    tables.export(csv_filepath, f='csv', compress=True) # json, excel, html, sqlite
    tables.to_csv(csv_filepath)

【讨论】:

  • 谢谢,是的,我认为通过添加路径现在可以工作了。但是,每次我从 pdf 文件中提取表格时,我都使用 files[i] 来命名 csv 文件。正如您现在可能的那样,文件 [i] 将包含文件名 + .pdf 因此有一种方法可以在我导出之前从名称中删除 .pdf,因为它不会给出错误,而是将 .pdf.csv 一起导出
  • 您可以将 '.pdf' 替换为 '.csv' ---> tables.to_csv(files[i].replace('.pdf,'.csv'))
猜你喜欢
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多