鱼C论坛

 找回密码
 立即注册
查看: 1912|回复: 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()`函数将文件扩展名转换为小写来实现。

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

def search_keywords_in_pdf(directory, keyword):
    files = os.listdir(directory)
    for file in files:
        if file.lower().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()
                    if keyword in text:
                        print(f"Keyword '{keyword}' found in {file} (Page {page_num})")

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

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命令,在命令行中运行以下命令:
pip install PyPDF2

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

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

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

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

for file_name in pdf_files:
    file_path = folder_path + '/' + file_name
    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库的方法是运行以下命令:

pip install PyPDF2

安装完成后,你就可以使用PyPDF2库编写代码来批量搜索PDF文件了。以下是使用PyPDF2库进行关键字批量搜索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})")

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

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库(自带的,不用安装、)
import glob

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

# 打印搜索结果
for file in files:
    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类代替。

以下是修改后的示例代码:
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()
                    if keyword in text:
                        print(f"Keyword '{keyword}' found in {file} (Page {page_num})")

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

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文件,然后对每个文件进行搜索。

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

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

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

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

for root, dirs, files in os.walk(folder_path):
    for file_name in files:
        if file_name.endswith('.pdf'):
            file_path = os.path.join(root, file_name)
            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()`函数将文件扩展名转换为小写来实现。

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

def search_keywords_in_pdf(directory, keyword):
    files = os.listdir(directory)
    for file in files:
        if file.lower().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()
                    if keyword in text:
                        print(f"Keyword '{keyword}' found in {file} (Page {page_num})")

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

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-11-14 18:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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