鱼C论坛

 找回密码
 立即注册
查看: 1265|回复: 10

[已解决]用关键字批量搜索PDF文件,安装哪个库好?

[复制链接]
发表于 2023-7-9 23:22:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用关键字批量搜索PDF文件,安装哪个库好?
最佳答案
2023-7-10 15:40:36
ssqchina 发表于 2023-7-10 15:36
问题找到了,就是if file.endswith('.pdf'):中的PDF大写和小写 搜索结果还不一样,这个怎么改?

你遇到的问题是因为文件扩展名的大小写导致的匹配错误。在Windows系统中,文件扩展名的大小写通常是不敏感的,而在其他操作系统(如Linux)中是区分大小写的。

要解决这个问题,你可以在比较文件扩展名时忽略大小写。可以使用`.lower()`函数将文件扩展名转换为小写来实现。

以下是修改后的代码示例:
  1. import os
  2. from PyPDF2 import PdfReader

  3. def search_keywords_in_pdf(directory, keyword):
  4.     files = os.listdir(directory)
  5.     for file in files:
  6.         if file.lower().endswith('.pdf'):  #忽略文件扩展名大小写
  7.             file_path = os.path.join(directory, file)
  8.             with open(file_path, 'rb') as f:
  9.                 pdf = PdfReader(f)
  10.                 for page_num, page in enumerate(pdf.pages, start=1):
  11.                     text = page.extract_text()
  12.                     if keyword in text:
  13.                         print(f"Keyword '{keyword}' found in {file} (Page {page_num})")

  14. # 指定要搜索的目录和关键字
  15. directory = '/path/to/pdf/files/directory'
  16. keyword = 'your_keyword'

  17. search_keywords_in_pdf(directory, keyword)
复制代码

请将`/path/to/pdf/files/directory`替换为包含你的PDF文件的目录路径,将`your_keyword`替换为你要搜索的关键字。使用`.lower()`函数将文件扩展名转换为小写,使得无论文件扩展名是大写还是小写,都能正确匹配。

同样,请确保已安装最新版本的PyPDF2库,并将代码中的目录路径和关键字替换为你自己的实际值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-9 23:26:42 | 显示全部楼层
在Python中,你可以使用PyPDF2库来处理PDF文件。它提供了一些有用的功能,如从PDF文件中提取文本、搜索关键字等。

要安装PyPDF2库,你可以使用pip命令,在命令行中运行以下命令:

  1. pip install PyPDF2
复制代码


安装完成后,你就可以在Python脚本中导入PyPDF2库并开始使用它来搜索PDF文件了。下面是一个简单的示例代码,演示了如何使用PyPDF2库搜索关键字:

  1. import PyPDF2

  2. def search_keywords_in_pdf(file_path, keywords):
  3.     with open(file_path, 'rb') as file:
  4.         pdf_reader = PyPDF2.PdfReader(file)
  5.         for page in pdf_reader.pages:
  6.             text = page.extract_text()
  7.             for keyword in keywords:
  8.                 if keyword in text:
  9.                     print(f"Found '{keyword}' in {file_path} (Page {page.page_number})")

  10. # 搜索关键字列表
  11. keywords = ['keyword1', 'keyword2']

  12. # 搜索指定文件夹下的所有PDF文件
  13. folder_path = '/path/to/pdf/folder'
  14. pdf_files = ['file1.pdf', 'file2.pdf', 'file3.pdf']

  15. for file_name in pdf_files:
  16.     file_path = folder_path + '/' + file_name
  17.     search_keywords_in_pdf(file_path, keywords)
复制代码


在上面的代码中, search_keywords_in_pdf 函数接受一个PDF文件路径和一个关键字列表作为参数,然后使用PyPDF2库打开PDF文件并逐页搜索关键字。如果找到匹配的关键字,就会打印出相应的信息。

你可以将上述代码保存为Python脚本,根据你的实际情况修改文件路径和关键字列表,并运行脚本来搜索PDF文件中的关键字。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-10 00:09:17 | 显示全部楼层
你可以安装PyPDF2库来实现用关键字批量搜索PDF文件。这是一个常用的Python库,提供了读取和操作PDF文件的功能。安装PyPDF2库的方法是运行以下命令:


  1. pip install PyPDF2
复制代码


安装完成后,你就可以使用PyPDF2库编写代码来批量搜索PDF文件了。以下是使用PyPDF2库进行关键字批量搜索PDF文件的示例代码:

  1. import os
  2. from PyPDF2 import PdfFileReader

  3. def search_keywords_in_pdf(directory, keyword):
  4.     files = os.listdir(directory)
  5.     for file in files:
  6.         if file.endswith('.pdf'):
  7.             file_path = os.path.join(directory, file)
  8.             with open(file_path, 'rb') as f:
  9.                 pdf = PdfFileReader(f)
  10.                 for page_num in range(pdf.getNumPages()):
  11.                     page = pdf.getPage(page_num)
  12.                     text = page.extractText()
  13.                     if keyword in text:
  14.                         print(f"Keyword '{keyword}' found in {file} (Page {page_num + 1})")

  15. # 指定要搜索的目录和关键字
  16. directory = '/path/to/pdf/files/directory'
  17. keyword = 'your_keyword'

  18. search_keywords_in_pdf(directory, keyword)
复制代码


在这个示例代码中,你需要将`/path/to/pdf/files/directory`替换为包含你的PDF文件的目录路径,将`your_keyword`替换为你要搜索的关键字。运行代码后,它会遍历指定目录中的所有PDF文件,并在每个文件的每一页中搜索关键字,如果找到匹配的关键字,则打印出文件名和页码。

请确保已安装PyPDF2库并将代码中的目录路径和关键字替换为你自己的实际值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-10 09:39:15 | 显示全部楼层
批量搜索文件的话,可以用glob库(自带的,不用安装、)
  1. import glob

  2. # 搜索当前目录下以关键字"keyword"开头的所有文件
  3. files = glob.glob("keyword*.pdf")

  4. # 打印搜索结果
  5. for file in files:
  6.     print(file)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-10 12:17:12 | 显示全部楼层
本帖最后由 ssqchina 于 2023-7-10 12:29 编辑
sfqxx 发表于 2023-7-10 00:09
你可以安装PyPDF2库来实现用关键字批量搜索PDF文件。这是一个常用的Python库,提供了读取和操作PDF文件的功 ...


import os
from PyPDF2 import PdfFileReader                           #类名用大写字母开头

def search_keywords_in_pdf(directory, keyword):
    files = os.listdir(directory)
    for file in files:
        if file.endswith('.pdf'):
            file_path = os.path.join(directory, file)
            with open(file_path, 'rb') as f:
                pdf = PdfFileReader(f)
                for page_num in range(pdf.getNumPages()):
                    page = pdf.getPage(page_num)
                    text = page.extractText()
                    if keyword in text:
                        print(f"Keyword '{keyword}' found in {file} (Page {page_num + 1})")

search_keywords_in_pdf('E:\\报表\\','工资')

"C:\Program Files (x86)\Python39-32\python.exe" D:\Python\PDF文档搜索.py
Traceback (most recent call last):
  File "D:\Python\PDF文档搜索.py", line 17, in <module>
    search_keywords_in_pdf('E:\\报表\\','工资')
  File "D:\Python\PDF文档搜索.py", line 10, in search_keywords_in_pdf
    pdf = PdfFileReader(f)
  File "C:\Users\ssq\AppData\Roaming\Python\Python39\site-packages\PyPDF2\_reader.py", line 1974, in __init__
    deprecation_with_replacement("PdfFileReader", "PdfReader", "3.0.0")
  File "C:\Users\ssq\AppData\Roaming\Python\Python39\site-packages\PyPDF2\_utils.py", line 369, in deprecation_with_replacement
    deprecation(DEPR_MSG_HAPPENED.format(old_name, removed_in, new_name))
  File "C:\Users\ssq\AppData\Roaming\Python\Python39\site-packages\PyPDF2\_utils.py", line 351, in deprecation
    raise DeprecationError(msg)
PyPDF2.errors.DeprecationError: PdfFileReader is deprecated and was removed in PyPDF2 3.0.0. Use PdfReader instead.

进程已结束,退出代码1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-10 12:53:11 | 显示全部楼层
ssqchina 发表于 2023-7-10 12:17
import os
from PyPDF2 import PdfFileReader                           #类名用大写字母开头

你遇到的错误是由于PyPDF2库的更新导致的。在PyPDF2版本3.0.0中,PdfFileReader类已经被弃用并移除了,需要使用PdfReader类代替。

以下是修改后的示例代码:

  1. import os
  2. from PyPDF2 import PdfReader

  3. def search_keywords_in_pdf(directory, keyword):
  4.     files = os.listdir(directory)
  5.     for file in files:
  6.         if file.endswith('.pdf'):
  7.             file_path = os.path.join(directory, file)
  8.             with open(file_path, 'rb') as f:
  9.                 pdf = PdfReader(f)
  10.                 for page_num, page in enumerate(pdf.pages, start=1):
  11.                     text = page.extract_text()
  12.                     if keyword in text:
  13.                         print(f"Keyword '{keyword}' found in {file} (Page {page_num})")

  14. # 指定要搜索的目录和关键字
  15. directory = '/path/to/pdf/files/directory'
  16. keyword = 'your_keyword'

  17. search_keywords_in_pdf(directory, keyword)
复制代码

同样,请将`/path/to/pdf/files/directory`替换为包含你的PDF文件的目录路径,将`your_keyword`替换为你要搜索的关键字。代码会遍历指定目录中的所有PDF文件,并在每个文件的每一页中搜索关键字,如果找到匹配的关键字,则打印出文件名和页码。

请注意,确保已安装最新版本的PyPDF2库,并将代码中的目录路径和关键字替换为你自己的实际值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-10 14:02:59 | 显示全部楼层
sfqxx 发表于 2023-7-10 12:53
你遇到的错误是由于PyPDF2库的更新导致的。在PyPDF2版本3.0.0中,PdfFileReader类已经被弃用并移除了,需 ...

import os
from PyPDF2 import PdfReader

def search_keywords_in_pdf(directory, keyword):
    files = os.listdir(directory)
    for file in files:
        if file.endswith('.pdf'):
            file_path = os.path.join(directory, file)
            with open(file_path, 'rb') as f:
                pdf = PdfReader(f)
                for page_num, page in enumerate(pdf.pages, start=1):
                    text = page.extract_text() #用extract_text函数获取当前页的文本内容
                    if keyword in text:
                        print(f"Keyword '{keyword}' found in {file} (Page {page_num})")

search_keywords_in_pdf('F:\\', '工资')

运行没有错误,但是找不到东西 是不是路径不对?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-10 14:05:28 | 显示全部楼层
isdkz 发表于 2023-7-9 23:26
在Python中,你可以使用PyPDF2库来处理PDF文件。它提供了一些有用的功能,如从PDF文件中提取文本、搜索关键 ...

你这个指定文件名?比如我要搜索d:\报表文件夹下所有PDF文件 怎么改?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-10 14:31:12 | 显示全部楼层
ssqchina 发表于 2023-7-10 14:05
你这个指定文件名?比如我要搜索d:\报表文件夹下所有PDF文件 怎么改?

如果你要搜索 d:\报表文件夹 下的所有PDF文件,可以使用 os 库来列出该文件夹下的所有PDF文件,然后对每个文件进行搜索。

以下是修改后的代码示例:

  1. import os
  2. import PyPDF2

  3. def search_keywords_in_pdf(file_path, keywords):
  4.     with open(file_path, 'rb') as file:
  5.         pdf_reader = PyPDF2.PdfReader(file)
  6.         for page in pdf_reader.pages:
  7.             text = page.extract_text()
  8.             for keyword in keywords:
  9.                 if keyword in text:
  10.                     print(f"Found '{keyword}' in {file_path} (Page {page.page_number})")

  11. # 搜索关键字列表
  12. keywords = ['keyword1', 'keyword2']

  13. # 搜索指定文件夹下的所有PDF文件
  14. folder_path = r'd:\报表文件夹'

  15. for root, dirs, files in os.walk(folder_path):
  16.     for file_name in files:
  17.         if file_name.endswith('.pdf'):
  18.             file_path = os.path.join(root, file_name)
  19.             search_keywords_in_pdf(file_path, keywords)
复制代码


在上述代码中,我们使用 os.walk 函数遍历了指定文件夹及其子文件夹下的所有文件。然后,我们判断每个文件是否以 .pdf 为扩展名,如果是,则使用 os.path.join 函数构建文件的完整路径,并将其传递给 search_keywords_in_pdf 函数进行搜索。

请注意, folder_path 变量前面的 r 表示原始字符串,用于处理路径中的转义字符。

你可以将上述代码保存为Python脚本并运行,以搜索 d:\报表文件夹 下的所有PDF文件中的关键字。记得将 keywords 列表替换为你要搜索的实际关键字列表。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-10 15:36:34 | 显示全部楼层
sfqxx 发表于 2023-7-10 12:53
你遇到的错误是由于PyPDF2库的更新导致的。在PyPDF2版本3.0.0中,PdfFileReader类已经被弃用并移除了,需 ...

问题找到了,就是if file.endswith('.pdf'):中的PDF大写和小写 搜索结果还不一样,这个怎么改?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-10 15:40:36 | 显示全部楼层    本楼为最佳答案   
ssqchina 发表于 2023-7-10 15:36
问题找到了,就是if file.endswith('.pdf'):中的PDF大写和小写 搜索结果还不一样,这个怎么改?

你遇到的问题是因为文件扩展名的大小写导致的匹配错误。在Windows系统中,文件扩展名的大小写通常是不敏感的,而在其他操作系统(如Linux)中是区分大小写的。

要解决这个问题,你可以在比较文件扩展名时忽略大小写。可以使用`.lower()`函数将文件扩展名转换为小写来实现。

以下是修改后的代码示例:
  1. import os
  2. from PyPDF2 import PdfReader

  3. def search_keywords_in_pdf(directory, keyword):
  4.     files = os.listdir(directory)
  5.     for file in files:
  6.         if file.lower().endswith('.pdf'):  #忽略文件扩展名大小写
  7.             file_path = os.path.join(directory, file)
  8.             with open(file_path, 'rb') as f:
  9.                 pdf = PdfReader(f)
  10.                 for page_num, page in enumerate(pdf.pages, start=1):
  11.                     text = page.extract_text()
  12.                     if keyword in text:
  13.                         print(f"Keyword '{keyword}' found in {file} (Page {page_num})")

  14. # 指定要搜索的目录和关键字
  15. directory = '/path/to/pdf/files/directory'
  16. keyword = 'your_keyword'

  17. search_keywords_in_pdf(directory, keyword)
复制代码

请将`/path/to/pdf/files/directory`替换为包含你的PDF文件的目录路径,将`your_keyword`替换为你要搜索的关键字。使用`.lower()`函数将文件扩展名转换为小写,使得无论文件扩展名是大写还是小写,都能正确匹配。

同样,请确保已安装最新版本的PyPDF2库,并将代码中的目录路径和关键字替换为你自己的实际值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 12:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表