【发布时间】:2021-02-19 17:48:04
【问题描述】:
第一次在这里发布问题,希望有经验/尝试过的人分享您的见解...在过去的几天和晚上,我一直在努力做到这一点...现在我无处可去在目录中的每个文件上循环此脚本。
基本上,这两个脚本工作得很好,它带来了一个 pdf 文件并将其更改为一个 excel 工作簿。现在我需要做的是浏览选定目录中的所有文件并执行相同的工作。
我一直卡在打开文件阶段 - 这是说不能调用数据(pdf 页面 - 数据 [0])吗?还是我应该添加更多阶段以将数据集引入...?
我是否必须为数据集创建一个列表,以便我可以调用数据,因为您需要调用的数据不止一个。这就是为什么 python 可以读取数据[0] ???
修改后的脚本
# import
import os
import glob
import pdftotext
import openpyxl
from pathlib import Path
from string import ascii_uppercase
# open a pdf file
def to_excel(pdf_file):
with open(pdf_file,'rb') as f:
data = pdftotext.PDF(f)
# operate data to get titles, values
datas = data[0].split('\r\n')
finalData = list()
for item in datas:
if item != '':
finalData.append(item)
finalDataRefined = list()
for item in finalData:
if item != ' BCA Scheduled Maintenance Questions' and item != ' Do you suspect there is Asbestos at the property?' and item != ' Yes' and item != ' No' and item != '\x0c':
finalDataRefined.append(item.strip())
titles = list()
values = list()
for num, item in enumerate(finalDataRefined):
if num % 2 == 0:
titles.append(item)
else:
values.append(item)
# get an output file name
OPRAST = values[1]
filename = work_dir / f"{OPRAST}.xlxs"
# create an excel workbook
excel_file = openpyxl.Workbook()
excel_sheet = excel_file.active
excel_sheet.append([])
alphaList = list(ascii_uppercase)
for alphabet in alphaList:
excel_sheet.column_dimensions[alphabet].width = 20
excel_sheet.append(titles)
excel_sheet.append(values)
# save the excel workbook
excel_file.save(filename)
excel_file.close
# run a python script every file in a directory
alphaList = list(ascii_uppercase)
work_dir = Path(r"C:\Users\Sunny Kim\Downloads\Do Forms")
for pdf_file in work_dir.glob("*.pdf"):
to_excel(pdf_file)
【问题讨论】:
-
尝试将您的第二个脚本包装在一个函数中,并为 abspath 的每个元素调用它。它还有助于将所有导入语句保留在文件的顶部。
-
感谢您的评论,我尝试使用函数(def)扭曲第二个脚本并尝试但仍然无法弄清楚如何循环目录中的所有文件....
-
你确定你有
data = pdftotext.PDF(f)执行吗?试试print(type(data)),如果得到WindowsPath,那么data = pdftotext.PDF(f)不会被执行。正如我之前提到的,现在你的data对象是不是pdf 内容对象,而是**WindowsPath**对象(由报告的错误指示),这意味着它是一个路径(路径 I意味着像C:\Users\Sunny Kim\Downloads\Do Forms\a.pdf这样的str而不是文件centent(比如你的pdf页面内容title, value, balabala),只有在你打开这个路径并阅读文件后,你才能得到pdf页面内容并使用data[0]得到第一页. -
另外一件事,你的代码缩进还不清楚......,我猜你只是直接从 jupyter notebook 粘贴它们。在 python 中,如果你没有提供正确的缩进,除了猜测之外,你很难理解你的代码逻辑。例如,函数
to_excel中的语句datas = data[0].split('\r\n')?在您的代码中,它不是,但它应该是。你能看到我在回答中提供的代码吗? -
嘿赵,你现在是 100% 一切正常,它是缩进错误 - 我从下面的脚本中修复了它,现在它工作得很好!!!你是个传奇!非常感谢,我现在都不知道该说什么了:-)我很感激
标签: python for-loop absolute-path pdftotext