Python中os.walk与glob.glob统计文件数量结果差异问询
两个统计方法的核心差异及结果不一致原因
核心差异
os.walk是对目标路径做全量递归遍历,原生区分文件和目录,返回的files列表直接包含当前目录下所有文件,不受文件名格式、后缀限制;而glob.glob是依赖你传入的匹配规则做路径匹配,默认不区分文件和目录,匹配结果完全受通配符规则限制。
结果不一致的具体原因
- 最核心原因:你使用的glob通配符是
*.*,该规则仅能匹配文件名中包含.的文件(即带扩展名的文件),所有无扩展名的文件(比如无后缀的笔记、系统缓存文件、README、LICENSE这类无后缀文件)都会被过滤掉,这就是两者差了近7000个文件的主要来源。 - 次要原因:
glob.glob返回的结果同时包含匹配到的文件和目录,如果你没有额外做os.path.isfile()判断,会把符合*.*规则的目录也统计进去,不过这一因素在你的场景中会让统计结果偏多,不是偏少的原因。 - 补充场景:Windows环境下如果目标路径中存在超长路径(超过260字符),旧版本Python的glob可能无法识别这类路径,也会导致统计结果偏少。
修正glob统计的方案
如果要让glob和os.walk的统计结果一致,可以修改匹配规则+增加文件判断:
import glob import os files = [p for p in glob.glob('C:\\Users\\fibi\\Documents\\**\\*', recursive=True) if os.path.isfile(p)] print(len(files))
内容的提问来源于stack exchange,提问作者user3283415
相关产品推荐
相关产品推荐

