python - 如何使用 python-camelot 从同一目录中的多个 PDF 中提取数据?
问题描述
我正在尝试从多个 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')
解决方案
正如评论中所建议的,问题在于 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)
推荐阅读
- python - 使用 python 的 pyodbc 到 MSSQL Server 的连接问题
- python - Python 数组操作模块中可能出现的错误
- c# - 在 Visual Studio 中设置显式写入默认访问修饰符
- python - 如何根据不同数组中的标签拆分数据集?
- authentication - Wildfly 远程处理:如何限制登录尝试次数?
- java - JUnit Jupiter 相当于 JUnit4 测试用例套件
- angular - Angular:MAT_DIALOG_DATA 问题在 mat 对话框中没有可用的数据
- java - 如何从传递的通用数组列表中访问元素
- jasmine - 如何从 grunt connect 通信端口到 grunt jasmine 任务
- java - 带有时间戳的 Java Spring/PgSQL 操作返回间隔