如何修改Python文件复制代码以保留原目录结构?
保留原目录结构复制文件的Python解决方案
我帮你调整了代码,解决了保留原目录结构的问题,同时修复了几个小bug,一起来看看:
原代码的问题点
你的代码目前有几个需要修正的地方:
- 变量名笔误:
food_list = fileNames.read().split('\n')里的fileNames应该是foodNames,不然会报未定义错误 - 路径转义问题:
open("C:\dirs.txt")里的\d会被Python当作转义字符处理,导致路径识别错误,需要用双反斜杠或者原始字符串 - 核心逻辑缺失:没有根据原文件的目录结构在目标文件夹下创建对应的子目录,所以所有文件都直接放到了
new_folder的根目录
修改后的完整代码
import os from shutil import copy # 用原始字符串定义路径,避免转义问题 food_file = r"C:\food.txt" new_folder = r"C:\newfolder_for_food\" dirs = [line.rstrip('\n') for line in open(r"C:\dirs.txt")] with open(food_file) as foodNames: # 读取文件名并过滤空行,避免处理无效的空文件名 food_list = [name.strip() for name in foodNames.read().split('\n') if name.strip()] for filename in food_list: for source_dir in dirs: source_path = os.path.join(source_dir, filename) if os.path.isfile(source_path): # 提取原路径中除盘符外的相对部分,比如C:\image\fruit\apple.png → image\fruit\apple.png drive, relative_path = os.path.splitdrive(source_path) # 拼接目标路径,把相对部分加到新文件夹后面 target_path = os.path.join(new_folder, relative_path.lstrip('\\')) # 创建目标目录(自动创建多级目录,已存在则不报错) os.makedirs(os.path.dirname(target_path), exist_ok=True) # 复制文件到对应的子目录 copy(source_path, target_path) # 找到文件后就停止遍历其他目录,提升效率 break print("Copying, Please Standby...") print("Executed!")
关键修改说明
- 路径结构保留:用
os.path.splitdrive拆分盘符和路径主体,把C:\image\fruit\里的image\fruit\部分提取出来,拼接到new_folder后面,这样就保留了原有的子目录结构 - 自动创建目录:
os.makedirs(..., exist_ok=True)会自动创建所有需要的子目录,不用担心目录不存在的问题 - 过滤无效内容:添加了对空行的过滤,避免处理
food.txt里的空文件名 - 优化查找逻辑:找到文件后用
break跳出内层循环,不用再遍历其他目录,节省时间
内容的提问来源于stack exchange,提问作者Poppel
相关产品推荐
相关产品推荐

