基于文本列表在目录树中查找并复制文件的Python脚本需求
Python脚本:根据TXT文件列表查找并复制目标文件
嘿,我懂你找了一堆脚本都没完全对上需求的郁闷——要从嵌套的子目录里(就是你说的abc、xyz这些目录下还有abc开头的次级子目录那种),精准匹配TXT文件里的文件名列表,然后把找到的文件都复制到指定目录对吧?给你整了个针对性的脚本,直接能用:
import os import shutil def copy_files_from_list(txt_path, target_dir): # 创建目标目录(如果不存在) os.makedirs(target_dir, exist_ok=True) # 读取TXT文件里的文件名列表,转成集合(查找更快) with open(txt_path, 'r', encoding='utf-8') as f: target_files = {line.strip() for line in f if line.strip()} # 遍历当前工作目录下的所有文件(包括嵌套子目录) current_dir = os.getcwd() for root, dirs, files in os.walk(current_dir): for file in files: if file in target_files: # 构建源文件路径和目标路径 src_path = os.path.join(root, file) dest_path = os.path.join(target_dir, file) # 处理重名文件:如果目标路径已存在,添加数字后缀 counter = 1 while os.path.exists(dest_path): name, ext = os.path.splitext(file) dest_path = os.path.join(target_dir, f"{name}_{counter}{ext}") counter += 1 # 复制文件 try: shutil.copy2(src_path, dest_path) print(f"已复制: {src_path} -> {dest_path}") except Exception as e: print(f"复制失败 {src_path}: {str(e)}") # -------------------------- 配置参数 -------------------------- # 替换成你的TXT文件路径(比如当前目录下的file_list.txt) INPUT_TXT = "file_list.txt" # 替换成你要复制到的目标目录路径 TARGET_DIRECTORY = "/volumes/target_dir" # ------------------------------------------------------------- if __name__ == "__main__": copy_files_from_list(INPUT_TXT, TARGET_DIRECTORY)
关键细节说明:
- 高效查找:把TXT里的文件名转成集合,比列表查找快很多,尤其是当文件列表很大的时候
- 自动创建目录:目标目录不存在的话,脚本会自动帮你创建,不用手动建
- 重名处理:如果目标目录里已经有同名文件,脚本会自动加
_1、_2这种后缀,避免覆盖原有文件 - 完整文件属性保留:用
shutil.copy2()而不是copy(),会保留文件的创建时间、修改时间这些元数据
你需要调整的地方:
- 把
INPUT_TXT改成你的实际TXT文件路径(比如如果TXT在当前目录,直接写文件名就行) - 把
TARGET_DIRECTORY改成你想要复制到的目录路径
额外小提示:
如果你的TXT里不是完整文件名,而是文件名的一部分(比如只存了abc0123里的0123),那你可以把判断条件改成if file.startswith(xxx)或者if xxx in file,根据你的实际需求调整就行。
内容的提问来源于stack exchange,提问作者Python_Newbie
相关产品推荐
相关产品推荐

