多文件夹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
相关产品推荐
相关产品推荐

