如何用 Python 从 PDF 文件中提取数据
数据存在于现代数字世界的所有领域,它有许多不同的形式。
最常见的数据格式之一是 PDF。企业和机构经常将发票、报告和其他表格存储在便携式文档格式(PDF)文件中。
从 PDF 文件中提取数据可能会很费力和费时。幸运的是,为了方便从 PDF 文件中提取数据,Python 提供了各种库。
本文将解释如何使用 Python 从 PDF 文件中提取数据。你将学习如何安装必要的库,我将提供如何安装的例子。
有几个 Python 库,你可以用来读取和提取 PDF 文件中的数据。这些库包括 PDFMiner、PyPDF2、PDFQuery 和 PyMuPDF。这里,我们将使用 PDFQuery 从多个 PDF 文件中读取和提取数据。
如何使用 PDFQuery
PDFQuery 是一个 Python 库,通过使用类似于 CSS 的选择器来定位文档中的元素,提供了一种从 PDF 文件中提取数据的简单方法。
它将一个 PDF 文件作为一个对象来读取,将 PDF 对象转换为一个 XML 文件,并通过其在 PDF 文件中的特定位置来访问所需的信息。
让我们考虑一个简短的例子来看看它是如何工作的。
from pdfquery import PDFQuery
pdf = PDFQuery('example.pdf')
pdf.load()
# 使用类似 CSS 的选择器来定位元素
text_elements = pdf.pq('LTTextLineHorizontal')
# 从元素中提取文本
text = [t.text for t in text_elements]
print(text)
在这段代码中,我们首先通过传递我们想要提取数据的 PDF 文件的文件名创建一个 PDFQuery 对象。然后我们通过调用 load() 方法将文件加载到该对象中。
接下来,我们使用类似 CSS 的选择器来定位 PDF 文档中的文本元素。pq() 方法被用来定位这些元素,它返回一个代表所选元素的 PyQuery 对象。
最后,我们通过访问每个元素的 text 属性从这些元素中提取文本,并将提取的文本存储在一个叫作 text 的列表中。
让我们考虑另一种方法,读取 PDF 文件,提取一些数据元素,并使用 PDFQuery 创建一个结构化的数据集。我们将遵循以下步骤:
- 安装包
- 导入库
- 读取和转换 PDF 文件
- 读取和转换数据
安装包
首先,我们需要安装 PDFQuery,同时安装 Pandas 以进行一些分析和数据展示。
$ pip install pdfquery
$ pip install pandas
导入库
import pandas as pd
import pdfquery
我们导入这两个库,以便能够在我们的项目中使用它们。
读取和转换 PDF 文件
#读取 PDF
pdf = pdfquery.PDFQuery('customers.pdf')
pdf.load()
#将 pdf 转换为 XML
pdf.tree.write('customers.xml', pretty_print = True)
pdf
我们将把 pdf 文件作为一个元素对象读入我们的项目,并加载它。将 pdf 对象转换成可扩展标记语言(XML)文件。这个文件包含了一个给定的 PDF 页面的数据和元数据。
XML 定义了一套规则,用于将 PDF 编码成人类和机器都能阅读的格式。使用文本编辑器查看 XML 文件,我们可以看到我们要提取的数据在哪里。
读取和转换数据
我们可以在 LTTextBoxHorizontal
标签里面得到想要提取的信息,我们可以看到与之相关的元数据。
在 XML 片段中,文本框内的值 [68.0, 231.57, 101.990, 234.893]
是指文本框的左、下、右、上坐标。你可以把它看作是我们要提取的数据周围的边界。
让我们使用文本框的坐标来访问和提取客户名称。
# 使用坐标读取数据
customer_name = pdf.pq('LTTextLineHorizontal:in_bbox("68.0, 231.57, 101.990, 234.893")').text()
print(customer_name)
#output: Brandon James
就这样,我们完成了!
注意
:有时我们想提取的数据在每个文件中的位置不完全相同,这可能会导致问题。幸运的是,PDFQuery 也可以查询包含一个给定字符串的标签。
总结
从 PDF 文件中提取数据是一项重要任务,因为这些文件经常被用于文档存储和共享。
Python 的 PDFQuery 是一个强大的工具,可用于从 PDF 文件中提取数据。任何想要从 PDF 文件中提取数据的人都会发现 PDFQuery 是一个很好的选择,因为它语法简单、文档全面,它也是开源的,可以修改以适应特定的用例。
相关文章
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串
在 Python Pandas 中使用 str.split 将字符串拆分为两个列表列
发布时间:2024/04/24 浏览次数:1124 分类:Python
-
本教程介绍如何使用 pandas str.split() 函数将字符串拆分为两个列表列。
在 Pandas 中将 Timedelta 转换为 Int
发布时间:2024/04/23 浏览次数:231 分类:Python
-
可以使用 Pandas 中的 dt 属性将 timedelta 转换为整数。
Python 中的 Pandas 插入方法
发布时间:2024/04/23 浏览次数:112 分类:Python
-
本教程介绍了如何在 Pandas DataFrame 中使用 insert 方法在 DataFrame 中插入一列。
使用 Python 将 Pandas DataFrame 保存为 HTML
发布时间:2024/04/21 浏览次数:106 分类:Python
-
本教程演示如何将 Pandas DataFrame 转换为 Python 中的 HTML 表格。
如何将 Python 字典转换为 Pandas DataFrame
发布时间:2024/04/20 浏览次数:73 分类:Python
-
本教程演示如何将 python 字典转换为 Pandas DataFrame,例如使用 Pandas DataFrame 构造函数或 from_dict 方法。
如何在 Pandas 中将 DataFrame 列转换为日期时间
发布时间:2024/04/20 浏览次数:101 分类:Python
-
本文介绍如何将 Pandas DataFrame 列转换为 Python 日期时间。