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

多文件夹TXT文件内容检索遇FileNotFoundError问题求助

解决多文件夹TXT文件检索的两类常见问题

一、修复FileNotFoundError

这个错误90%是因为你只拿到了文件名,没带上完整的文件夹路径,程序找不到文件的实际位置。解决方式很简单:

  • 遍历文件夹时,用os.path.join()把当前文件夹路径和文件名拼接成完整路径
  • 核心代码片段:
import os

# 替换成你的根文件夹路径
root_dir = "C:/你的TXT文件根目录"

for foldername, _, filenames in os.walk(root_dir):
    for filename in filenames:
        if filename.endswith(".txt"):
            # 生成完整文件路径,这步是关键
            full_file_path = os.path.join(foldername, filename)
            # 后续读取操作都用full_file_path,别再用单独的filename

二、解决编码错误

TXT文件的编码五花八门(UTF-8、GBK、Latin-1都有可能),直接用默认编码读取必然会报错。可以用「多编码尝试」的方式处理:

  • 先试最常用的UTF-8,失败就试GBK,再失败用Latin-1(Latin-1能兼容几乎所有字符,不会报错但可能显示乱码,但不影响字符串检索)
  • 封装一个安全读取函数:
def safe_read_file(file_path):
    # 按优先级尝试编码
    encodings = ["utf-8", "gbk", "latin-1"]
    for enc in encodings:
        try:
            with open(file_path, 'r', encoding=enc) as f:
                return f.read()
        except UnicodeDecodeError:
            continue
    # 所有编码都失败时记录错误
    print(f"警告:无法解码文件 {file_path}")
    return ""

三、完整的检索脚本

把上面两部分结合,直接可用的完整代码:

import os

def safe_read_file(file_path):
    encodings = ["utf-8", "gbk", "latin-1"]
    for enc in encodings:
        try:
            with open(file_path, 'r', encoding=enc) as f:
                return f.read()
        except UnicodeDecodeError:
            continue
    print(f"警告:无法解码文件 {file_path}")
    return ""

def search_targets(root_dir, target_list):
    match_results = []
    for foldername, _, filenames in os.walk(root_dir):
        for filename in filenames:
            if filename.endswith(".txt"):
                full_path = os.path.join(foldername, filename)
                content = safe_read_file(full_path)
                for target in target_list:
                    if target in content:
                        match_results.append(f"找到匹配:{target} 在 {full_path}")
    return match_results

if __name__ == "__main__":
    # 替换成你的实际路径和要检索的内容
    target_folder = "C:/你的TXT文件根目录"
    targets = ["HSBC", "91274163"]
    
    results = search_targets(target_folder, targets)
    for res in results:
        print(res)

四、额外提示

  • 路径要写对:Windows用反斜杠\或者转义的正斜杠//,Mac/Linux用正斜杠/
  • 如果遇到极少数超大文件(你说都是小型文件可以忽略),可以改成逐行读取,避免占内存:把safe_read_file里的return f.read()改成逐行遍历检查目标字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:15:52