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 shutildef 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 shutildef choice_decorator(func):def wrapper(keywords):print("请选择查找选项:")print("1. 查找任一关键词")print("2. 查找同时关键词")choice = input("请输入选项 (1 或 2): ")if choice not in ["1", "2"]:print("无效选项,请重新运行程序。")returnsource_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功能的强大和编程时的灵活性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1338.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

python网络爬虫基础:requests库的应用

Requests 库是在 urllib 的基础上开发而来,相比之下更加简洁优美,在编写爬虫程序时应用较为广泛。注意,本文更偏于程序实现,具体各个字段、参数的解释详见本专栏其他博文(后续看情况更新)。闲话少说&#x…

新能源汽车火灾应急处置程序

摘要:新能源汽车在人们的日常生活中被广泛应用,但其消防安全问题也逐渐凸显。本文分析了新能源汽车的起火原因、燃烧危害性,并着重阐述了新能源汽车发生火灾后消防应急处置程序及应对措施等。 关键词:新能源汽车;火灾…

双十一买什么?便宜又好用的数码好物分享

​每年双十一大促期间,许多平时想买但又感觉有些贵的数码好物都会降至最低价格,此时入手岂不美哉,还犹豫就只能等明年了。也有很多小伙伴不知道该入手些什么数码好物,接下来我就给大家盘点几款整体使用下来还不错的数码好物。 长…

【矩阵理论常见符号说明】

矩阵理论常见符号说明 参考链接 【矩阵理论/刘启明主编. 北京:国防出版社】

11.Node.js API接口

八、API接口 8.1 json-server工具 1)安装json-server npm i -g json-server2)示例 //students.json {"student":[{"id":1,"name":"sally","age":18,"gender":"女"},{"id":2,&…

Linux与Windows中的流量抓取工具:wireshark与tcpdump

1. wireshark(windows上主要用到的流量分析工具) 下载安装,安装到本地(安装到虚拟机可能抓不到包) 下载地址 1.1. 数据报文字段含义 source:源IP destination:目的IP protocol:协…

DevExpress中文教程 - 如何使用AI模型检查HTML编辑中的语法?

DevExpress .NET MAUI多平台应用UI组件库提供了用于Android和iOS移动开发的高性能UI组件,该组件库包括数据网格、图表、调度程序、数据编辑器、CollectionView和选项卡组件等。 目前许多开发人员正在寻找多种方法将AI添加到解决方案中(这通常比想象的要…

Django+Vue智慧分析居家养老系统统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者&…

400G光模块的3种封装(QSFP-DD、OSFP、CFP8)

400G光模块封装的趋势 光模块封装形式具有三个共同特点:外形小巧、功耗低、可与所有系统供应商互操作。了解 100G光模块市场的发展将有助于我们理解400G技术的引入。服务提供商需要可插拔光模块来实现长距离和专用技术,例如相干检测。数据中心团队需要一…

基于SSM+微信小程序的社团登录管理系统(社团1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 2、项目技术 3、开发环境 4、功能介绍 1、项目介绍 基于SSM微信小程序的社团登录管理系统实现了管理员及社团、用户。 1、管理员实现了首页、用户管理、社团管理、社团信息管理、社…

宝塔FTP服务配置结合内网穿透实现安全便捷的远程文件管理和传输

文章目录 前言1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 前言 本文主要介绍宝塔FTP文件传输服务如何搭配内网穿透工具,实现随时随地远程连接局域网环境搭建的宝塔FTP文件服务并进行文件…

SpringBoot旋律:打造现代Web音乐平台

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理音乐网站的相关信息成为必然。开发合适的音…

labview学习总结

labview学习总结 安装labview的特点一、图形化编程范式二、并行执行机制三、硬件集成能力四、应用领域优势五、开发效率六、系统集成能力**labview基本组成示意图****常用程序结构图解**结语 基础知识介绍界面前后面板的概念平铺式和层叠式 帧的概念结构类型顺序结构for循环whi…

AI在医学领域:一种用于肩部CT扫描的新型深度学习框架

肩关节骨关节炎(OA)是一种常见的慢性退行性关节疾病,通常与老化相关的磨损有关,但也可能由创伤、劳损或退变等因素引起。其主要症状包括肩关节疼痛、肿胀、活动受限和弹响等。肩关节骨关节炎的高危因素包括既往肩部手术、创伤史、…

【论文翻译】IJCAI 2019 | Graph WaveNet:用于深度时空图建模的Graph WaveNet

论文题目Graph WaveNet for Deep Spatial-Temporal Graph Modeling作者团队Zonghan Wu, Shirui Pan, Guodong Long, Jing Jiang, Chengqi Zhang机构澳大利亚悉尼科技大学人工智能中心 (UTS) 和 澳大利亚莫纳什大学发表会议IJCAI 2019论文链接https://www.ijcai.org/proceedings…

宝塔使用clickhouse踩坑

前言 最近有个物联网项目,需要存储物联网终端发送过来的信息(类似log日志,但又要存储在数据库里,方便后期聚合统计),本来想写文件的奈何客户要求聚合统计,所以只能用数据库才能达到更高的计算效…

群控系统服务端开发模式-应用开发-文件上传功能开发

一、文件上传路由 在根目录下route文件夹中app.php文件中,添加文件上传功能路由,代码如下: Route::post(upload/file,common.Upload/file);// 上传文件接口 二、功能代码开发 在根目录下app文件夹下common文件夹中创建上传控制器并命名为Up…

ZYNQ7020使用IIC协议读写IO扩展芯片PCF8575

IO扩展是个好东西, 占用资源少. 适合用在响应要求不高的场合. PCF8575最大的好处是有个中断反馈引脚, 方便读取状态. 下面直接上代码. Vivado中的配置. XDC文件的配置 set_property -dict {PACKAGE_PIN L14 IOSTANDARD LVCMOS33} [get_ports IIC_0_scl_io] set_property -dic…

如何确定DFMEA中发生频率(O)的风险优先数(RPN)?

众所周知,DFMEA(设计失效模式和效果分析)特别关注于产品设计阶段的风险评估。在DFMEA中,风险优先数(RPN)是一个核心指标,用于量化失效模式的严重性(S)、发生频率&#xf…

goframe开发一个企业网站 前端界面 拆分界面7

将页面拆出几个公用部分 在resource/template/front创建meta.html header.html footer.html meta.html <head><meta charset"utf-8"><meta content"widthdevice-width, initial-scale1.0" name"viewport"><title>{{.…