Python使用os.walk遍历目录提取手机号时FileNotFoundError报错求解
问题原因及修复方案
报错原因
- 你调用
os.walk()返回的files列表里仅存储当前遍历目录下的纯文件名,不包含路径前缀 - 直接调用
open(f)时,程序只会在你运行脚本的当前工作目录查找文件,自然找不到存放在子目录里的文件 - 你之前拼接路径失败大概率是误把
subfolder参数加入了拼接逻辑,实际上os.walk()返回的第一个值folder已经是当前遍历层级的完整路径,不需要额外拼接subfolder
修复后的代码
import re import os def extract_phone(top): lst = [] # 提前编译正则表达式提升匹配效率 phone_pattern = re.compile(r'\d{3}-\d{3}-\d{4}') for folder, _, files in os.walk(top): for f in files: # 仅处理.txt格式的文件 if not f.endswith('.txt'): continue # 拼接得到文件的完整路径 full_file_path = os.path.join(folder, f) # 用with上下文管理器自动处理文件关闭,避免资源泄漏 with open(full_file_path, 'r', encoding='utf-8', errors='ignore') as fp: content = fp.read() matched_phones = phone_pattern.findall(content) if matched_phones: # 用extend避免最终返回嵌套列表 lst.extend(matched_phones) return lst
补充说明
如果需要匹配国内11位无分隔符的手机号,可以把正则表达式替换为r'1[3-9]\d{9}'即可。
内容的提问来源于stack exchange,提问作者Amit Govind Sharma
相关产品推荐
相关产品推荐

