Python批量查找包含多个关键词的PDF文件

 更新时间:2024年11月01日 08:34:59   作者:PythonFun  
在信息爆炸的时代,数据管理变得愈发重要,本文主要为大家介绍了如何通过Python批量查找包含多个关键词的PDF文件,希望对大家有所帮助

在信息爆炸的时代,数据管理变得愈发重要。U盘作为一种便携式存储设备,常常承载着我们大量的个人和工作数据。然而,随着文件数量的增加,在U盘中快速找到特定文件常常成为一个令人头疼的难题。我们通常可以采用everything来快速查找我们想要的文件,但是everything只有查找功能,并没有复制功能,同时不能进行批量的查找,所以这时就可能要使用到万能的Python工具了,Python中的os标准模块可以遍历,查找文件,再用shutil来文件拷贝到指定位置。

一、查找包含单一关键词的文件

比如我们要查找U盘中包括:"翻译", "国际", "英语", "国别" 任一关键词的pdf文件,找到后复制到查找文件这一个目录下,如果找不到就重新建立查找文件这个文件夹。代码如下:

import os
import shutil
 
# 定义要查找的关键词
keywords = ["翻译", "国际", "英语", "国别"]
 
# 定义要遍历的目录和目标目录
source_directory = "你的源目录路径"  # 替换为你的U盘路径,如果是当前目录下可以直接填写为"."
target_directory = os.path.join(source_directory, "查找文件")
 
# 如果目标目录不存在,则创建它
if not os.path.exists(target_directory):
    os.makedirs(target_directory)
 
# 遍历源目录下的所有文件和文件夹
for root, dirs, files in os.walk(source_directory):
    for file in files:
        # 检查文件名是否包含任何关键词,并且是PDF文件
        if any(keyword in file for keyword in keywords) and file.endswith('.pdf'):
            source_file_path = os.path.join(root, file)
            target_file_path = os.path.join(target_directory, file)
            # 复制文件到目标目录
            shutil.copy(source_file_path, target_file_path)
            print(f"已复制: {source_file_path} 到 {target_file_path}")
 
print("文件查找和复制完成!")

使用时,将 source_directory 替换为你要遍历的目录的路径。

运行代码,它会遍历指定的目录,查找包含关键词的PDF文件并复制到“查找文件”文件夹中。

确保在你的Python环境中安装了所需的模块(如 os 和 shutil),这些模块通常是Python标准库的一部分,无需额外安装。

二、查找多关键词同时出现的文件

查找同时包含“翻译”和“硕”两个关键词的PDF文件名,并将其复制到“查找文件”文件夹中呢?

import os
import shutil
 
# 定义要查找的关键词
keywords = ["翻译", "硕"]
 
# 定义要遍历的目录和目标目录
source_directory = "你的源目录路径"  # 替换为你的源目录路径
target_directory = os.path.join(source_directory, "查找文件")
 
# 如果目标目录不存在,则创建它
if not os.path.exists(target_directory):
    os.makedirs(target_directory)
 
# 遍历源目录下的所有文件和文件夹
for root, dirs, files in os.walk(source_directory):
    for file in files:
        # 检查文件名是否同时包含所有关键词,并且是PDF文件
        if all(keyword in file for keyword in keywords) and file.endswith('.pdf'):
            source_file_path = os.path.join(root, file)
            target_file_path = os.path.join(target_directory, file)
            # 复制文件到目标目录
            shutil.copy(source_file_path, target_file_path)
            print(f"已复制: {source_file_path} 到 {target_file_path}")
 
print("文件查找和复制完成!")

使用说明:

将 source_directory 替换为你要遍历的目录的路径。

运行代码,它会查找同时包含“翻译”和“硕”的PDF文件并将其复制到“查找文件”文件夹中。

三、把以上两种功能合二为一

设置选项,当用户输入不同的选项就进行不同的操作。

import os
import shutil
 
def find_files_any(source_directory, keywords):
    target_directory = os.path.join(source_directory, "查找文件_any")
    if not os.path.exists(target_directory):
        os.makedirs(target_directory)
        
    for root, dirs, files in os.walk(source_directory):
        for file in files:
            if any(keyword in file for keyword in keywords):
                print(f"找到任一关键词文件: {file}")
 
def find_files_all(source_directory, keywords):
    target_directory = os.path.join(source_directory, "查找文件_all")
    if not os.path.exists(target_directory):
        os.makedirs(target_directory)
        
    for root, dirs, files in os.walk(source_directory):
        for file in files:
            if all(keyword in file for keyword in keywords):
                source_file_path = os.path.join(root, file)
                target_file_path = os.path.join(target_directory, file)
                shutil.copy(source_file_path, target_file_path)
                print(f"已复制: {source_file_path} 到 {target_file_path}")
 
def main():
    keywords_any = ["翻译", "国际"]
    keywords_all = ["翻译", "硕"]
    
    print("请选择查找选项:")
    print("1. 查找任一关键词")
    print("2. 查找同时关键词")
    
    choice = input("请输入选项 (1 或 2): ")
    
    source_directory = input("请输入你的U盘路径: ")
    
    if choice == "1":
        find_files_any(source_directory, keywords_any)
    elif choice == "2":
        find_files_all(source_directory, keywords_all)
    else:
        print("无效选项,请重新运行程序。")
 
    print("文件查找完成!")
 
if __name__ == "__main__":
    main()

显示情况如下:

显示结果

四、采用装饰器法来写

为了使我们的代码更pythonic,我们可以设置一下装饰器,这样可以为我们设置的函数添加新的功能。

import os
import shutil
 
def choice_decorator(func):
    def wrapper(keywords):
        print("请选择查找选项:")
        print("1. 查找任一关键词")
        print("2. 查找同时关键词")
        
        choice = input("请输入选项 (1 或 2): ")
        
        if choice not in ["1", "2"]:
            print("无效选项,请重新运行程序。")
            return
        
        source_directory = input("请输入你的U盘路径: ")
        
        if choice == "1":
            return func(source_directory, keywords[0])  # 传递任一关键词
        elif choice == "2":
            return func(source_directory, keywords[1])  # 传递同时关键词
    
    return wrapper
 
@choice_decorator
def find_files(source_directory, keywords):
    target_directory = os.path.join(source_directory, f"查找文件_{keywords[0]}")
    if not os.path.exists(target_directory):
        os.makedirs(target_directory)
    
    for root, dirs, files in os.walk(source_directory):
        for file in files:
            if all(keyword in file for keyword in keywords):
                source_file_path = os.path.join(root, file)
                target_file_path = os.path.join(target_directory, file)
                shutil.copy(source_file_path, target_file_path)
                print(f"已复制: {source_file_path} 到 {target_file_path}")
 
def main():
    keywords_any = ["翻译", "国际"]
    keywords_all = ["翻译", "硕"]
    
    # 将关键词组合放在一个列表中,以便装饰器使用
    keywords = [keywords_any, keywords_all]
    
    find_files(keywords)
 
    print("文件查找完成!")
 
if __name__ == "__main__":
    main()

五、学后总结

本来是一个遍历文件夹进行筛选的问题,现在可以采用多种方法,分不同的场景进行。最后,利用上Python的装饰器,使我们的程序变得更加高大上。同一个问题,由浅入深,用函数法、交互法、装饰器法来解决,显示出Python功能的强大和编程时的灵活性。

到此这篇关于Python批量查找包含多个关键词的PDF文件的文章就介绍到这了,更多相关Python查找包含多关键词的PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中 whl包、tar.gz包的区别详解

    Python中 whl包、tar.gz包的区别详解

    whl格式本质上是一个压缩包,里面包含了py文件,以及经过编译的pyd文件,这篇文章主要介绍了Python中 whl包、tar.gz包的区别,需要的朋友可以参考下
    2022-08-08
  • Python程序员开发中常犯的10个错误

    Python程序员开发中常犯的10个错误

    这篇文章主要介绍了Python程序员开发中常犯的10个错误,不知道你有没有中枪呢,需要的朋友可以参考下
    2014-07-07
  • python运行cmd命令行的3种方法总结

    python运行cmd命令行的3种方法总结

    虽然python在调用cmd命令方面使用的比较少,不过还是要用的,下面这篇文章主要给大家介绍了关于python运行cmd命令行的3种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • Python中使用正则表达式精准匹配IP地址的案例

    Python中使用正则表达式精准匹配IP地址的案例

    Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋友一起看看吧
    2025-04-04
  • Python使用email模块对邮件进行编码和解码的实例教程

    Python使用email模块对邮件进行编码和解码的实例教程

    Python中我们一般使用SMTP模块来首发邮件,而用email模块来处理邮件编码,本文我们就来详细看一下Python使用email模块对邮件进行编码和解码的实例教程,需要的朋友可以参考下
    2016-07-07
  • python操作摄像头截图实现远程监控的例子

    python操作摄像头截图实现远程监控的例子

    这篇文章主要介绍了python操作摄像头截图实现远程监控的例子,例子中包含了控制摄像头、写入Windows注册表方法等,需要的朋友可以参考下
    2014-03-03
  • python中的selenium入门超详细教程

    python中的selenium入门超详细教程

    这篇文章主要介绍了python中的selenium入门超详细教程,本文是在python环境下使用selenium,使用浏览器是Chrome,系统是win10系统,需要的朋友可以参考下
    2023-11-11
  • matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)

    matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)

    这篇文章主要介绍了matplotlib绘制鼠标的十字光标(自定义方式,官方实例),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Pandas Describe函数的具体使用

    Pandas Describe函数的具体使用

    在Pandas中,describe()能够为数据框中的数值列提供统计摘要信息,本文主要介绍了Pandas Describe函数的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • python实现人像动漫化的示例代码

    python实现人像动漫化的示例代码

    这篇文章主要介绍了python实现人像动漫化的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05

最新评论