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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:48:04