You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

技术需求:遍历172个目录下所有文件查找特定单词(附单目录代码)

实现递归遍历所有目录并查找特定单词

没问题!要完成遍历172个目录(含子目录)查找特定单词的需求,我们可以用Python内置的os.walk()方法——它能帮你递归遍历目标路径下的所有层级目录和文件,刚好替代你当前用的listdir()(仅能处理单目录)。

修改后的完整代码

import os

# 替换成你的根目录路径(所有172个目录的上级目录)
ROOT_DIR = "/user/your_root_directory"
TARGET_WORD = "checksum"
RESULT_FILE = "/user/results.txt"

with open(RESULT_FILE, "w") as result_f:
    # os.walk会递归遍历ROOT_DIR下的所有目录
    for dirpath, _, filenames in os.walk(ROOT_DIR):
        for filename in filenames:
            # 用os.path.join安全拼接文件路径,避免手动拼接的路径错误
            file_path = os.path.join(dirpath, filename)
            try:
                with open(file_path, "r") as current_file:
                    text = current_file.read()
                    # 获取不带后缀的文件名(比[:-4]更通用,适配不同长度的后缀)
                    file_name_no_ext = os.path.splitext(filename)[0]
                    if TARGET_WORD in text:
                        result_f.write(f"{TARGET_WORD} found in {file_name_no_ext}\n")
                    else:
                        result_f.write(f"NOT found in {file_name_no_ext}\n")
            except Exception as e:
                # 处理可能的文件读取错误(比如权限问题、非文本文件)
                result_f.write(f"Error reading {file_name_no_ext}: {str(e)}\n")

关键改进点说明

  • os.walk()的使用:它会返回三个值:当前遍历的目录路径dirpath、该目录下的子目录列表、该目录下的文件列表filenames,通过循环就能覆盖所有层级的目录。
  • 安全的路径拼接:用os.path.join()替代字符串拼接,能自动适配不同操作系统的路径分隔符(比如Windows的\和Linux的/),避免路径错误。
  • 通用的文件名处理:用os.path.splitext(filename)[0]获取不带后缀的文件名,比你原来的filename[:-4]更灵活——不管文件后缀是.txt(4位)还是.log(3位)都能正确处理。
  • 异常处理:添加了try-except块,避免遇到无法读取的文件(比如权限不足、二进制文件)时程序崩溃,还能把错误信息写入结果文件方便排查。

注意事项

  1. 记得把ROOT_DIR替换成实际包含所有172个目录的上级路径;
  2. 如果只需要遍历一级目录(不包含子目录),可以在os.walk循环里处理完当前目录后break,或者用os.listdir结合os.path.isdir判断,但os.walk依然是最通用的方案。

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

火山引擎 最新活动