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

如何使用Python os模块遍历主目录子目录并对txt文件执行代码

原有代码问题说明

你写的代码核心问题是路径不完整:os.listdir('../main_directory') 仅返回主目录下条目的名称,不带主目录路径前缀,直接对返回的名称调用os.listdir()会在当前工作目录下查找对应文件夹,大概率触发路径不存在的报错。
另外不建议通过os.chdir()切换工作目录的方式实现遍历,这种写法如果中途抛出异常,工作目录不会自动还原,很容易引发后续相对路径操作的隐性bug,也完全不需要手动用f字符串拼接路径,Python自带的路径处理工具会自动适配不同操作系统的路径分隔符,比手动拼接可靠得多。

可直接运行的实现方案

方案1:基于os模块(兼容所有Python版本)

仅遍历主目录的直接子目录

如果只需要处理主目录下第一层子目录里的txt文件,不需要递归更深层级,用下面的写法:

import os

main_path = '../main_directory'
for entry_name in os.listdir(main_path):
    # 拼接得到子目录的完整路径
    sub_dir_path = os.path.join(main_path, entry_name)
    # 跳过主目录下的零散文件,只处理子目录
    if not os.path.isdir(sub_dir_path):
        continue
    # 遍历当前子目录下的所有条目
    for file_name in os.listdir(sub_dir_path):
        file_path = os.path.join(sub_dir_path, file_name)
        # 只处理txt格式的文件,跳过嵌套文件夹和其他格式文件
        if os.path.isfile(file_path) and file_name.endswith('.txt'):
            # 此处写入你的文件处理逻辑,file_path就是目标txt的完整路径
            print(f"处理文件: {file_path}")
            # 示例:读取文件内容
            # with open(file_path, 'r', encoding='utf-8') as f:
            #     content = f.read()

递归遍历所有层级子目录

如果需要处理主目录下所有嵌套层级的txt文件(包括子目录里的子目录),直接用os.walk()即可,不需要手动写多层循环:

import os

main_path = '../main_directory'
for root, _, files in os.walk(main_path):
    for file_name in files:
        if file_name.endswith('.txt'):
            file_path = os.path.join(root, file_name)
            # 此处写入文件处理逻辑
            print(f"处理文件: {file_path}")

方案2:基于pathlib(Python3.4+ 推荐写法)

pathlib是Python3之后官方推荐的路径处理模块,写法更简洁,不需要手动拼接路径:

from pathlib import Path

main_path = Path('../main_directory')

# 仅遍历第一层子目录的txt文件
for sub_dir in main_path.iterdir():
    if not sub_dir.is_dir():
        continue
    for txt_file in sub_dir.glob('*.txt'):
        # 此处写入处理逻辑,txt_file为Path对象,可直接调用open等方法
        print(f"处理文件: {txt_file}")
        # 示例读取内容:
        # content = txt_file.read_text(encoding='utf-8')

# 递归遍历所有层级子目录的txt文件,把上面的glob换成rglob即可
# for txt_file in main_path.rglob('*.txt'):
#     处理逻辑
注意事项
  • 不要手动用f字符串拼接路径斜杠:Windows系统路径分隔符为\,Linux/macOS为/,手动拼接的代码跨系统运行会直接报错,用os.path.join或者pathlib的内置方法会自动适配系统分隔符。
  • 遍历过程中必须加类型判断:os.listdir()会返回目录下所有内容,包括隐藏文件、子文件夹、其他后缀的文件,不加判断直接按txt文件处理会触发报错。
  • 非必要不要调用os.chdir():切换工作目录带来的路径问题排查成本极高,直接传递完整路径的写法稳定性高很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:09:21