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

如何用Python遍历多子目录查找包含指定字符串的文件?

问题分析与解决

嘿,你的思路方向是对的,用os.walk确实是实现多级目录遍历的正确方式,但你漏掉了一个关键细节——文件路径的拼接!

核心错误

os.walk返回的fname只是当前遍历子目录(也就是root变量指向的目录)里的纯文件名,不是完整路径。你直接用open(fname, 'r')时,Python会在当前程序的工作目录里找这个文件,而不是在对应的子目录中查找,自然会出现文件找不到或者打开错误文件的问题。

修正后的代码

我们需要用os.path.join(root, fname)把当前目录路径和文件名拼接成完整的文件路径,另外还可以加上一些实用的优化(比如自动关闭文件、异常处理),避免程序崩溃:

import os
path = input('Directory Path: ')
searchstring1 = input('Search String: ')

for root, dirs, files in os.walk(path):
    for fname in files:
        # 拼接出完整的文件路径,这是你遗漏的关键步骤
        full_file_path = os.path.join(root, fname)
        try:
            # 用with语句打开文件,无需手动close,更安全
            with open(full_file_path, 'r', encoding='utf-8') as f:
                if searchstring1 in f.read():
                    print(f'found string in file {full_file_path}')
        except Exception as e:
            # 捕获无法读取文件的异常,比如权限不足、二进制文件等
            print(f'无法读取文件 {full_file_path}: {str(e)}')

额外优化说明

  • 用with语句管理文件上下文,Python会自动帮你关闭文件,避免资源泄漏。
  • 加上编码参数encoding='utf-8',减少因文件编码不一致导致的读取错误。
  • 异常捕获可以处理各种意外情况,让程序更健壮。
  • 打印完整路径,方便你直接定位到目标文件的位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:04:14