使用 Python 检查 PDF 文件中是否存在字符串

pythonserver side programmingprogramming

在当今的数字世界中,PDF 文件已成为存储和共享信息的重要媒介。但是,有时很难在 PDF 文档中找到特定的文本字符串,尤其是当文件很长或很复杂时。这时,流行的编程语言 Python 就派上用场了。

Python 提供了几个库,允许我们与 PDF 文件交互并从中提取信息。一项常见任务是在 PDF 文件中搜索特定字符串。这可用于各种目的,例如数据分析、文本挖掘或信息检索。

在这种情况下,我们有一个问题,我们想要检查 PDF 文件中是否存在特定字符串。为了解决这个问题,我们可以使用两种不同的方法。

第一种方法是直接在 PDF 文件中搜索字符串。此方法利用 PDF 库,该库提供搜索功能来搜索整个 PDF 文件中的字符串。该库读取 PDF 文件并对文件内容执行搜索操作。这种方法快速而高效,因为它不需要遍历 PDF 文件的每一行。

第二种方法涉及遍历 PDF 文件的每一行并检查每行中是否存在字符串。这种方法涉及打开 PDF 文件,逐行读取,并检查每行中是否存在字符串。与第一种方法相比,这种方法速度较慢且效率较低,但在某些情况下,当我们需要对搜索过程进行更细粒度的控制时,这种方法很有用,例如当我们需要从 PDF 文件中提取特定信息时。

总之,第一种方法涉及直接在 PDF 文件中搜索字符串,而第二种方法涉及遍历 PDF 文件的每一行并检查每行中是否存在字符串。选择使用哪种方法取决于手头任务的具体要求。

现在我们已经足够讨论了这些方法,让我们专注于编写第一种方法的代码。

方法 1

# 我们要搜索的字符串
St = 'Shruti'

# 以阅读模式打开 PDF 文件
with open("example.pdf", "r") as f:
    # 将整个文件读入字符串变量"a"
    a = f.read()

    # 检查文件内容中是否存在字符串"St"
    if St in a:
        # 如果字符串存在,则打印一条消息表明其存在
        print('String '', St, '' Is Found In The PDF File')
    else:
        # 如果字符串不存在,则打印一条消息表明其不存在
        print('String '', St, '' Not Found')

# 关闭文件
f.close()

解释

在此代码中,我们有一个要在 PDF 文件中搜索的字符串 St。我们使用 open() 函数以读取模式打开 PDF 文件,并将文件分配给变量 f。文件名"example.pdf"应替换为您要搜索的文件的名称。

接下来,我们使用 read() 方法将 PDF 文件的所有内容读入字符串变量 a。这将创建一个包含 PDF 文件中所有文本的字符串。

然后,我们使用 in 关键字检查文件内容中是否存在字符串 St。如果在 PDF 文件中找到该字符串,我们将打印一条消息表明其存在。如果未找到该字符串,我们将打印一条消息表明其不存在。

最后,我们使用 close() 方法关闭文件以释放与文件句柄关联的任何系统资源。这是一个重要的步骤,可确保我们不会不必要地打开任何文件,否则将来可能会导致问题。

总体而言,此代码提供了一种在 PDF 文件中搜索字符串的简单方法。但是,需要注意的是,如果 PDF 文件包含复杂的格式、图形或图像,则此方法可能不起作用,因为这些元素可能不包含在 read() 方法返回的字符串中。在这种情况下,可能需要使用专门的 PDF 库从 PDF 文件中提取文本并在提取的文本中搜索字符串。

要运行上述代码,我们需要运行下面显示的命令。

命令

python3 main.py

运行上述命令后,我们将在终端中获得以下输出。

输出

("String '", 'Shruti', "' Is Found In The PDF File")

现在让我们关注第二种方法。

方法 2

要检查 PDF 文件中是否存在字符串,我们可以逐行搜索。首先,我们打开文件并读取其内容,这些内容存储在名为 f 的变量中。我们将行变量和计数器都设置为零,以开始逐行遍历文件。

使用 for 循环,我们遍历文件的每一行并检查字符串是否存在。如果在行中找到字符串,我们将打印一条消息指示其存在。最后,我们关闭文件以释放与文件句柄关联的任何系统资源。

通过逐行搜索,我们可以更准确地在 PDF 文件中定位字符串。但是,这种方法可能比一次搜索整个文件要慢,尤其是对于较大的 PDF 文件。此外,重要的是要考虑文件中的任何格式或其他非文本元素,这可能需要专门的 PDF 库来处理。

考虑下面显示的代码。

示例

# 定义要搜索的字符串
St = 'Shruti'

# 以读取模式打开 PDF 文件
f = open("example.pdf", "r")

# 初始化计数器变量
c = 0
line = 0

# 循环遍历文件中的每一行
    for a in f:
    # 增加行计数器
    line = line + 1
    
    # 检查字符串是否存在于行中
    if St in a:
        # 设置标志变量以指示已找到字符串
        c = 1
        # 找到字符串后退出循环
        break

# 检查标志变量以查看是否找到字符串
if c == 0:
    # 打印一条消息,表明未找到字符串
    print('String '', St, '' Not Found')
else:
    # 打印一条消息,表明找到字符串的行号
    print('String '', St, '' Is Found In Line', line)

# 关闭文件以释放与文件句柄相关的任何系统资源
f.close()

解释

此代码在名为 example.pdf 的 PDF 文件中搜索字符串"Shruti"。该文件应与 Python 脚本位于同一目录中,或者应指定文件的完整路径。

我们首先定义要搜索的字符串,然后使用 open() 函数以读取模式打开 PDF 文件。文件对象被分配给变量 f。

然后我们初始化两个变量:c 是一个设置为 0 的标志变量,line 是一个设置为 0 的计数器变量。

接下来,我们使用 for 循环遍历文件中的每一行。对于每一行,我们增加行计数器。然后我们使用 in 运算符检查字符串 St 是否存在于行中。如果是,我们将 c 标志变量设置为 1 以指示已找到该字符串,并使用 break 语句退出循环。

循环结束后,我们检查 c 标志变量的值。如果它仍然为 0,则表示在文件中未找到字符串 St,我们将打印一条消息来表明这一点。否则,我们将使用 print() 函数打印一条消息来表明找到该字符串的行号。

最后,我们使用 close() 方法关闭文件以释放与文件句柄相关的任何系统资源。

这种方法对于在大型 PDF 文件中搜索字符串非常有用,因为它允许我们在找到字符串后停止搜索,而不是将整个文件读入内存。但是,需要注意的是,如果 PDF 文件包含复杂的格式、图形或图像,则此方法可能不起作用,因为这些元素可能不包含在循环返回的行中。在这种情况下,可能需要使用专门的 PDF 库从 PDF 文件中提取文本并在提取的文本中搜索字符串。

要运行上述代码,我们需要运行下面显示的命令。

命令

python3 main.py

一旦我们运行上述命令,我们将在终端中获得以下输出。

输出

("String '", 'Shruti', "' Is Found In Line", 3727)

结论

总之,使用 Python 检查 PDF 文件中是否存在字符串可以使用各种方法完成,具体取决于手头任务的要求。

在本教程中,我们讨论了两种检查 PDF 文件中是否存在字符串的方法:直接搜索整个 PDF 文件或逐行搜索。我们还提供了这两种方法的工作示例,以及详细的解释和代码注释。通过了解这些方法,您应该能够使用 Python 在 PDF 文件中搜索特定文本,这对于各种应用程序(例如数据挖掘、文本提取等)来说都是一个有价值的工具。


相关文章