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


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

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

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

第一种方法涉及直接在 PDF 文件中搜索字符串。这种方法利用一个 PDF 库,该库提供搜索功能来搜索整个 PDF 文件中的字符串。该库读取 PDF 文件并在文件内容上执行搜索操作。这种方法快速有效,因为它不需要迭代 PDF 文件的每一行。

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

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

既然我们已经充分讨论了这些方法,那么让我们专注于编写第一种方法的代码。

方法一

# The string we want to search for
St = 'Shruti'

# Open the PDF file in read mode
with open("example.pdf", "r") as f:
    # Read the entire file into a string variable 'a'
    a = f.read()

    # Check if the string 'St' is present in the file contents
    if St in a:
        # If the string is present, print a message indicating its presence
        print('String '', St, '' Is Found In The PDF File')
    else:
        # If the string is not present, print a message indicating its absence
        print('String '', St, '' Not Found')

# Close the file
f.close()

说明

在此代码中,我们有一个字符串 St,我们想要在 PDF 文件中搜索它。我们使用 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")

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

方法二

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

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

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

考虑以下代码。

示例

# Define the string to search for
St = 'Shruti'

# Open the PDF file in read mode
f = open("example.pdf", "r")

# Initialize counter variables
c = 0
line = 0

# Loop over each line in the file
for a in f:
    # Increment the line counter
    line = line + 1

    # Check if the string is present in the line
    if St in a:
        # Set the flag variable to indicate the string was found
        c = 1
        # Exit the loop once the string is found
        break

# Check the flag variable to see if the string was found
if c == 0:
    # Print a message indicating the string was not found
    print('String '', St, '' Not Found')
else:
    # Print a message indicating the line number where the string was found
    print('String '', St, '' Is Found In Line', line)

# Close the file to release any system resources associated with the file handle
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 文件中搜索特定文本,这对于各种应用程序(例如数据挖掘、文本提取等)都是宝贵的工具。

更新于:2023年8月2日

浏览量:513

开启你的职业生涯

完成课程获得认证

开始学习
广告