使用pdfplumber查找PDF中的文本,返回页码,然后返回表格

时间:2019-05-01 17:10:15

标签: python-3.x pdf

我下载了42个PDF,每个PDF的格式都相似。每个表格都有各种表格,其中之一标记为“校园报告的事件”。该特定表在每个PDF中的不同页面上。我想编写一个函数,该函数将搜索具有“校园报告的事件”的页面并刮擦该表,以便可以将其放入数据框。

我发现可以使用PDFPlumber搜索字符串“校园报告的事件”并返回页码。然后,我将编写一个使用页码抓取我想要的表的函数,然后在每个PDF中循环该函数。但是,我不断收到错误“参数不可迭代”或“类型对象不可下标”。我浏览了PDFPlumber文档,但没有解决我的问题。

以下是我尝试过的代码示例:

url = "pdfs/example.pdf"

import pdfplumber

pdf = pdfplumber.open(url)

for page in range[0:len(pdf.pages)]:
    if 'Total number of physical restraints' in pdf.pages[page]:
        print(pdf.page_number)

1 个答案:

答案 0 :(得分:8)

我看到这篇文章是前一阵子的,但也许此回复仍然可以帮助您或其他人。

该错误似乎是由于您循环浏览页面而引起的。 range对象不是列表,这就是为什么您看到"type object is not subscriptable"错误消息的原因。而是尝试"Enumerate"浏览页面。 "i"将使您可以访问索引(也就是循环中的当前计数)。 "pg"将使您可以访问PDF页面中的页面对象。我没有在下面使用"pg"变量,但是如果需要,可以使用它代替"pages[i]"

下面的代码应从每个页面打印表格,并允许您访问表格以进一步操作它们。

import pdfplumber
pdf_file = "pdfs/example.pdf"
tables=[]
with pdfplumber.open(pdf_file) as pdf:
    pages = pdf.pages
    for i,pg in enumerate(pages):
        tbl = pages[i].extract_tables()
        print(f'{i} --- {tbl}')