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.mzph.cn/bicheng/58864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chromium HTML5 新的 Input 类型tel对应c++

一、Input 类型: tel <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>test</title> </head> <body><form action"demo-form.php">电话号码: <input type"tel" name…

cisco网络安全技术第4章测试及考试

测试 以下 ACE 将放置在何处&#xff1f; permit icmp any any nd-na 试题 1选择一项&#xff1a; 在连接到另一个路由器并已启用 IPv6 的路由器接口上 使用下一代防火墙而不是状态防火墙的一个好处是什么&#xff1f; 试题 2选择一项&#xff1a; 主动而不是被动防护互…

【SQL】SQL函数

&#x1f4e2; 前言 函数 是指一段可以直接被另一段程序调用的程序或代码。主要包括了以下4中类型的函数。 字符串函数数值函数日期函数流程函数 &#x1f384; 字符串函数 ⭐ 常用函数 函数 功能 CONCAT(S1,S2,...Sn) 字符串拼接&#xff0c;将S1&#xff0c;S2&#xff0…

Springboot 整合 Java DL4J 构建自然语言处理之机器翻译系统

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

第三份代码:VoxelNet的pytorch实现

VoxelNet是点云体素化处理的最开始的网络结构设计&#xff0c;通过完全弄明白整个VoxelNet的pytorch实现是非常有必要的。 参考的代码是这一份&#xff1a;GitHub - RPFey/voxelnet_pytorch: modification of voxelnet 参考文章&#xff1a;VoxelNet论文解读和代码解析_voxel…

vue3-element-admin 去掉登录

1.src/router/index 去掉登录路由 // {// path: "/login",// component: () > import("/views/login/index.vue"),// meta: { hidden: true },// },2./src/plugins/permission修改 未登录 import type {NavigationGuardNext,RouteLocationNormal…

CentOS 9 Stream 上安装 Redis

CentOS 9 Stream 上安装 Redis CentOS 9 Stream 上安装 RedisCentOS 9 Stream 上卸载 Redis CentOS 9 Stream 上安装 Redis 在 CentOS 9 Stream 上安装 Redis&#xff0c;可以按照以下步骤进行&#xff1a; 更新系统包&#xff1a; sudo dnf update -y安装 Redis&#xff1a; …

NLP算法工程师精进之路:顶会论文研读精华

1.学术能力培养 全部论文资料下载&#xff1a; 将论文和 GitHub 资源库匹配 papers with code https://paperswithcode.com/OpenGitHub 新项目快报Github pwc&#xff1a;https://github.com/zziz/pwc GitXiv&#xff1a;http://www.gitxiv.com/ 文章撰写 Overleaf [Autho…

01_AI编程案例展示:借助AI轻松爬取海量网盘链接

爬虫案例展示 今天,我们将展示如何利用AI快速开发一个网络爬虫&#xff0c; 使用的工具是Python和Claude 3.5 Sonnet(国内可用豆包替代) 我们的目标是爬取panhub.fun网站上的夸克网盘链接, 即使你是编程新手,也可以轻松完成这样的任务。 案例1-批量爬取panhub网盘整合包 下…

【C++动态规划 01背包】2787. 将一个数字表示成幂的和的方案数

本文涉及知识点 C动态规划 C背包问题 LeetCode2787. 将一个数字表示成幂的和的方案数 给你两个 正 整数 n 和 x 。 请你返回将 n 表示成一些 互不相同 正整数的 x 次幂之和的方案数。换句话说&#xff0c;你需要返回互不相同整数 [n1, n2, …, nk] 的集合数目&#xff0c;满…

websocket的使用

websocket的封装&#xff0c;面对后端为服务架构 // websocket.js import Vue from vue;class WebSocketService {constructor() {this.socket null;this.state Vue.observable({isConnected: false,currentUrl: ,retries: 0,maxRetries: 5,reconnectInterval: 3000});this.…

一分钟学会Python基础

Python 是一种广泛使用的高级编程语言&#xff0c;因其简洁和易读的语法而受到欢迎。下面是一些 Python 基础知识的概述&#xff1a; 1. 安装 Python 1.下载: 你可以从 Python 官网 下载适合你操作系统的版本。 2.安装: 安装过程中&#xff0c;确保勾选 "Add Python to …

vue下载安装

目录 vue工具前置要求&#xff1a;安装node.js并配置好国内镜像源下载安装 vue 工具 系统&#xff1a;Windows 11 前置要求&#xff1a;安装node.js并配置好国内镜像源 参考&#xff1a;本人写的《node.js下载、安装、设置国内镜像源&#xff08;永久&#xff09;&#xff…

ASP.NET Core 应用程序的Startup笔记

在 ASP.NET Core 中&#xff0c;Startup 类是用于配置应用程序的服务和请求管道的地方。 默认情况下&#xff0c;Visual Studio 2022 创建的 ASP.NET Core Web API 项目可能不再包含 Startup 类&#xff0c;而是直接在 Program.cs 中进行配置。这是因为从 .NET 6 开始&#xf…

计算机毕业设计——ssm基于Java的酒店管理系统的设计与实现演示录像2021

作者&#xff1a;程序媛9688开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等。 &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0…

Spring整合Mybatis过程

配置文件 springConfig --> [jdbcConfig mybatisConfig] jdbc配置文件进行基本的数据库连接池配置 mybatis配置文件进行SqlSessionFactory Bean 和 MapperScannerConfigurer Bean的创建 在Spring容器启动时&#xff0c;系统会根据配置创建并初始化所有MyBatis所需的Bean…

光纤中光的散射

什么现象是光的散射&#xff1f; 辐射在不均匀介质中传播时&#xff0c;会产生偏离光的入射方向的光。 背向散射光分为哪些&#xff1f; 瑞利散射、布里渊散射和拉曼散射。 瑞利散射的原理是&#xff1f; 瑞利散射是由微粒的弹性碰撞而产生的&#xff0c;所以散射前后光波…

Java Executor ScheduledFuture 源码

前言 相关系列 《Java & Executor & 目录》《Java & Executor & ScheduledFuture & 源码》《Java & Executor & ScheduledFuture & 总结》《Java & Executor & ScheduledFuture & 问题》 涉及内容 《Java & Executor &…

Kafka 客户端工具使用分享【offsetexplorer】

前言&#xff1a; 前面我们使用 Spring Boot 继承 Kafka 完成了消息发送&#xff0c;有朋友会问 Kafka 有没有好用的客户端工具&#xff0c;RabbitMQ、RocketMQ 都有自己的管理端&#xff0c;那 Kafka 如何去查看发送出去的消息呢&#xff1f; 本篇我们就来分享一个好用的工具…

远程控制项目第一天

使用C开发&#xff0c;git进行版本控制&#xff0c; 关于远程项目的思考 需求分析 文件需求 1.观察文件 2.打开文件 3.下载文件 4.删除文件 观察需求 1.远程监控 控制需求 1.鼠标控制 2.键盘控制 3.锁机/解锁 技术分析 服务器部署在被控端 网络编程 文件处理 鼠标处理 图像处…