我有一个遍历整个目录的脚本,可提取每个PDF并提取文本并在每个PDF中找到关键字。似乎可以处理少量PDF文件,但是只要遇到有问题的PDF,脚本就会中断。
我在函数中实现了try andexcept块来避免这些问题,但是由于脚本只是连续运行,所以它似乎不起作用。我对所有这些都是新手,特别是使用try和except块。如何修复我的脚本以使用try和except块,以便该脚本仅处理好PDF并忽略所有坏PDF而不会破坏该脚本?
p = Path("C:/Users/Hugo Caldeira/Desktop")
inp = r"((?<=|^)[0-9]{3}-[0-9]{2}-[0-9]{4}(?=|$))"
file_dict = {
"name": [],
"created": [],
"modified":[],
'path':[],
'content':[],
'keyword':[]
}
files = list(p.rglob('*pdf'))
def pdfparser(file):
fp = open(file, 'rb')
rsrcmgr = PDFResourceManager()
retstr = io.StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
#Create a PDF interpreter object.
interpreter = PDFPageInterpreter(rsrcmgr, device)
#Process each page contained in the document.
for page in PDFPage.get_pages(fp):
interpreter.process_page(page)
data = retstr.getvalue()
return(data)
def pdfs(files):
for name in files:
while True:
try:
IP_list = (pdfparser(name))
except (RuntimeError, TypeError, NameError):
print('got error')
keyword = re.findall(inp,IP_list)
#print(ip_test)
file_dict['keyword'].append(keyword)
file_dict['name'].append(name.name[0:])
file_dict['created'].append(time.ctime(name.stat().st_ctime))
file_dict['modified'].append(time.ctime(name.stat().st_mtime))
file_dict['path'].append(name)
file_dict["content"].append(IP_list)
#print(file_dict)
return(file_dict)
pdfs(files)
print(pdfparser(p))
def to_xlsx():
df = pd.DataFrame.from_dict(file_dict)
df.head()
df.to_excel("pdftest.xlsx")
if __name__ == "__main__":
to_xlsx()
答案 0 :(得分:0)
如所写,try / except之后的代码将失败,因为您引用的是try部分中绑定的名称。即使没有,也没有办法退出while循环。相反:
for name in files:
try:
IP_list = (pdfparser(name))
keyword = re.findall(inp,IP_list)
... # Etc, etc.
except (RuntimeError, TypeError, NameError):
print("Error processing {}".format(name))