在PDFminer中无法实现try和except

时间:2019-05-01 11:26:45

标签: python python-3.x try-except pdfminer

我有一个遍历整个目录的脚本,可提取每个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()

1 个答案:

答案 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))