如何在folder_X的子文件夹内批量执行代码且保留文件原位置?
遍历子文件夹处理文件并保留原路径的解决方案
下面是两种方法的正确实现方式,你可以对照检查自己的代码哪里出了问题:
方法一:使用os.walk
os.walk是遍历目录树的标准方法,核心是要拿到每个文件的完整路径,处理后直接在原路径覆盖或生成新文件(如果需要保留原文件就修改文件名)。
示例代码:
import os root_folder = "folder_X" # 遍历所有子文件夹和文件 for root, dirs, files in os.walk(root_folder): for file in files: # 拼接文件的完整路径 file_path = os.path.join(root, file) # 这里写你的处理逻辑,比如读取文件 with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 示例处理:给内容加个前缀(替换成你的实际操作) processed_content = f"[processed] {content}" # 将处理后的内容写回原文件(如果要保留原文件,就改文件名比如file_path + ".processed") with open(file_path, 'w', encoding='utf-8') as f: f.write(processed_content) print(f"已处理文件:{file_path}")
方法二:使用glob(Python 3.5+)
glob的递归模式需要开启recursive=True,并且用**匹配所有子目录,同时要注意判断目标是否为文件(避免把文件夹当成文件处理)。
示例代码:
import glob import os # 匹配folder_X下所有子文件夹里的文件,**表示递归所有层级 file_paths = glob.glob(os.path.join("folder_X", "**", "*"), recursive=True) for path in file_paths: # 跳过文件夹,只处理文件 if not os.path.isfile(path): continue # 同样写你的处理逻辑 with open(path, 'r', encoding='utf-8') as f: content = f.read() processed_content = f"[processed] {content}" # 写回原路径 with open(path, 'w', encoding='utf-8') as f: f.write(processed_content) print(f"已处理文件:{path}")
常见问题排查
- 你之前的代码可能没正确拼接完整路径,导致处理时找不到文件或写到了错误的位置
- 如果只需要处理特定后缀的文件(比如
.txt),可以把匹配规则改成os.path.join("folder_X", "**", "*.txt"),避免处理无关文件 - 注意文件权限问题,如果出现写入错误,检查是否有文件被占用或没有写入权限
内容的提问来源于stack exchange,提问作者NeedsSpatialAttention
相关产品推荐
相关产品推荐

