当前位置: 首页 > news >正文

按照文本每行匹配文件复制到指定位置

1

  • 从指定的 TXT 文件(txt_file)中读取若干关键字(去重并按字典序排序)。

  • 在给定的源目录(source_dir)及其子目录中,查找文件名包含某关键字的第一个文件。

  • 将该文件移动到目标目录(target_dir),并在遇到重名时自动添加后缀 _1, _2… 以免覆盖。

  • 控制台实时输出每个关键字的匹配与移动结果,最后汇总共多少关键字、成功移动多少个文件。

1

假设目录与文件如下:

H:\
├─ data
│   ├─ report1.txt
│   ├─ image_fail.png
│   └─ sub
│       └─ test_error.log
├─ list.txt
└─ copy    (初始为空)

list.txt 内容(每行一个关键字)

report
fail
missing
error

运行控制台输出

✔ 已移动: 'report1.txt' 对应关键字 'report' 到 'H:\copy\report1.txt'
✔ 已移动: 'image_fail.png' 对应关键字 'fail' 到 'H:\copy\image_fail.png'
⚠ 未找到匹配文件 for key: 'missing'
✔ 已移动: 'test_error.log' 对应关键字 'error' 到 'H:\copy\test_error.log'共 4 个关键字,成功移动 3 个,对应文件。未移动 1 个。

执行后目录结构

H:\
├─ data
│   └─ sub
│       └─               (原 test_error.log 已移动)
├─ copy
│   ├─ report1.txt
│   ├─ image_fail.png
│   └─ test_error.log
├─ list.txt

import os
import shutildef move_files_from_txt(txt_file, source_dir, target_dir):"""仅移动文件名中包含 TXT 文件中任意一行关键字的文件。如果某关键字未匹配任何文件,会在控制台报告。"""# 创建目标目录os.makedirs(target_dir, exist_ok=True)# 读取并去重 TXT 关键字with open(txt_file, 'r', encoding='utf-8') as f:keys = sorted({line.strip() for line in f if line.strip()})moved_keys = set()# 对每个关键字,查找并移动第一个匹配的文件for key in keys:found = Falsefor root, _, files in os.walk(source_dir):for fname in files:if key in fname:# 构造路径src = os.path.join(root, fname)dst = os.path.join(target_dir, fname)# 处理重名if os.path.exists(dst):base, ext = os.path.splitext(fname)i = 1while os.path.exists(os.path.join(target_dir, f"{base}_{i}{ext}")):i += 1dst = os.path.join(target_dir, f"{base}_{i}{ext}")# 移动shutil.move(src, dst)print(f"✔ 已移动: '{fname}' 对应关键字 '{key}' 到 '{dst}'")moved_keys.add(key)found = Truebreakif found:breakif not found:print(f"⚠ 未找到匹配文件 for key: '{key}'")total = len(keys)success = len(moved_keys)print(f"\n共 {total} 个关键字,成功移动 {success} 个,对应文件。未移动 {total - success} 个。")# 示例使用
if __name__ == '__main__':txt_file = r"H:\list.txt"source_directory = r"H:\data"target_directory = r"H:\copy"move_files_from_txt(txt_file, source_directory, target_directory)

1

相关文章:

  • Ethan独立开发产品日报 | 2025-04-22
  • Linux: 进程的调度
  • 【电子通识】热敏打印机是怎么形成(打印)图像和文字的?
  • ctfshow web8
  • 3.2 Agent核心能力:感知、规划、决策与执行
  • 高并发系统的通用设计方法是什么?
  • 大厂面试-redis
  • 大数据利器Kafka
  • 2025年4月24日 奇门遁甲和股市行情
  • Sqlserver 自增长id 置零或者设置固定值
  • 45、子类需要重写父类的构造函数嘛,子类自己的构造函数呢?
  • gem5-gpu教程03 当前的gem5-gpu软件架构(因为涉及太多专业名词所以用英语表达)
  • Python 流程控制
  • VUE3中使用echarts,配置都正确,不出现tooltip
  • 1.1 java开发的准备工作
  • 运维案例:让服务器稳定运行,守护业务不掉线!
  • AI大模型和人脑的区别
  • 流程架构是什么?为什么要构建流程架构,以及如何构建流程结构?
  • Android Gradle Plugin (AGP) 和 Gradle 的關係
  • Java_day25-29
  • 潘功胜在美谈关税:吁全球经济勿滑向“高摩擦、低信任”轨道
  • 著名诗人、中国城市发展研究院原常务副院长吕贵品逝世
  • 新东方:2025财年前三季度净利增29%,第四财季海外业务将承压
  • 联手华为猛攻主流市场,上汽集团总裁:上汽不做生态孤岛
  • 从“龙队”到“龙副主席”,国乒这批退役球员为何不当教练了
  • 土耳其发生6.2级地震,震源深度10千米