You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python遍历子文件夹并移动指定http.log文件到目标文件夹

遍历目录移动指定http.log文件的代码修正

原代码存在的核心错误

  • 路径变量未使用字符串引号包裹,会触发未定义变量报错
  • 缩进完全缺失,Python对缩进有强语法要求,if/else分支必须在循环内缩进
  • os.walk返回的files是当前路径下的文件名列表,无法直接和字符串'http.log'做相等判断
  • 不存在os.move方法,且原代码中移动操作的语法完全错误,未指定源文件路径、目标文件路径参数
  • 不存在skip关键字,Python分支中不需要额外声明跳过逻辑,不满足判断条件会自动进入下一轮循环
  • 未提前处理目标文件夹不存在的场景,直接移动文件会触发路径不存在报错

修正后可直接运行的代码

import os
import shutil

# 定义源文件夹、目标文件夹路径,字符串需加引号
target_folder = "new_folder_with_http"
source_folder = "original_data"

# 自动创建目标文件夹,文件夹已存在时不触发报错
os.makedirs(target_folder, exist_ok=True)

# 递归遍历源文件夹下所有内容
for root, _, files in os.walk(source_folder):
    # 遍历当前路径下的所有文件
    for file_name in files:
        if file_name == "http.log":
            # 拼接源文件的完整绝对路径
            source_full_path = os.path.join(root, file_name)
            # 拼接目标位置的完整路径
            target_full_path = os.path.join(target_folder, file_name)
            # 执行移动操作,shutil.move兼容跨磁盘分区移动场景
            shutil.move(source_full_path, target_full_path)
            print(f"移动完成: {source_full_path} -> {target_full_path}")

注意事项

  • 如果不同子文件夹下存在多个同名http.log,上述代码会出现后移动的文件覆盖先移动文件的问题。如果需要保留所有文件,可以在目标文件名中拼接源文件的相对路径做区分,例如将文件名替换为f"{root.replace(os.sep, '_')}_{file_name}"避免重名
  • 不建议使用os.rename做文件移动,该方法在跨磁盘分区场景下会直接报错,shutil.move会自动处理跨分区复制+删除源文件的逻辑,兼容性更好

内容的提问来源于stack exchange,提问作者uka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:06:19