如何用Python按列表复制指定文件至新目录并记录未找到文件?
解决按列表复制文件并记录未找到文件的问题
嗨,作为Python新手能主动找解决方案已经超棒啦!我来帮你把这段代码的细节讲透,还会补上记录未找到文件的功能,完全适配你的需求~
一、先搞懂原代码的路径设置
其实你不用手动写路径哦,原代码里的三个路径都是通过弹窗让你可视化选择的:
filePath:点击弹窗后选择你那个包含E3004、D0402这类文件名的文本文件folderPath:选择你要搜索的目标目录(也就是这些文件原本存放的地方)destination:选择你要复制文件到的新目录
这样完全不用纠结路径怎么写,选对文件/文件夹就行!
二、修正逻辑+添加记录未找到文件的功能
原代码有个小逻辑问题:它是遍历目标目录里的所有文件,判断是否在你的文件名列表里,但这样没法知道列表里哪些文件根本不在目标目录里。我们调整下逻辑,改成遍历你列表里的每个文件名,去目标目录找是否存在,这样就能精准记录未找到的文件啦。
下面是修改后的完整代码:
import os import shutil from tkinter import Tk, filedialog # 初始化tkinter弹窗 root = Tk() root.withdraw() # 隐藏主窗口,只显示弹窗 # 弹窗选择需要的文件和目录 filePath = filedialog.askopenfilename(title="选择包含文件名的文本文件") folderPath = filedialog.askdirectory(title="选择要搜索的目标目录") destination = filedialog.askdirectory(title="选择文件要复制到的新目录") # 读取文本文件里的文件名,去掉每行的换行和空格 files_to_find = [] with open(filePath, "r", encoding="utf-8") as fh: for row in fh: filename = row.strip() if filename: # 跳过空行 files_to_find.append(filename) # 用来记录未找到的文件名 missing_files = [] # 遍历要找的每个文件名 for filename in files_to_find: # 拼接目标目录的完整文件路径 source_file = os.path.join(folderPath, filename) # 判断文件是否存在 if os.path.isfile(source_file): # 复制文件到新目录 shutil.copy(source_file, destination) print(f"已复制文件: {filename}") else: # 未找到的文件加入列表 missing_files.append(filename) print(f"未找到文件: {filename}") # 将未找到的文件名写入新的文本文件 if missing_files: # 把未找到的文件列表写入到新目录下的记录文件(你也可以改路径和文件名) missing_file_path = os.path.join(destination, "未找到的文件记录.txt") with open(missing_file_path, "w", encoding="utf-8") as mf: for file in missing_files: mf.write(file + "\n") print(f"未找到的文件已记录到: {missing_file_path}") else: print("所有文件都已找到并复制完成!")
三、关键改动说明
- 调整了遍历逻辑:从遍历目标目录文件改为遍历你的文件名列表,这样能准确捕捉到哪些文件不存在
- 新增了
missing_files列表,专门存放未找到的文件名 - 最后把未找到的文件名写入到新目录下的
未找到的文件记录.txt里(你可以自己改这个文件名和保存路径) - 加入了空行判断,避免文本文件里的空行被当成文件名处理
- 用
os.path.isfile()判断是否是文件(避免把目录当成文件处理)
这样运行代码后,你选好对应的文件和目录,就能自动完成复制,还能看到哪些文件没找到,记录也会自动生成哦!
内容的提问来源于stack exchange,提问作者Chris Carey
相关产品推荐
相关产品推荐

