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

use*_*004 3 pdf python-3.x

我下载了 42 个 PDF,每个 PDF 的格式都相似。每个都有不同的表格,其中一张标有“校园报告事件”。该特定表格位于每个 PDF 的不同页面上。我想编写一个函数来搜索具有“校园报告事件”的页面并抓取该表,以便我可以将其放入数据框中。

我想我可以使用 PDFPlumber 搜索字符串“Campus Reported Incidents”并返回页码。然后我会写一个函数,使用页码来抓取我想要的表格,我会在每个 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)
Run Code Online (Sandbox Code Playgroud)

小智 12

我看到这篇文章是很久以前的,但也许这个回复仍然会帮助你或其他人。

该错误似乎来自您循环浏览页面的方式。该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}')
Run Code Online (Sandbox Code Playgroud)