os.walk未遍历给定路径下全部文件的问题求助
问题分析与解决
问题根源
你当前的代码逻辑存在错误:
data.append(files)是把每个目录下的文件列表作为一个独立元素添加到data中,所以len(data)统计的是遍历到的目录总数,而非文件总数。你看到的3600其实是Documents及其子目录的数量,不是实际文件数。- 另外,
os.walk默认会遍历所有深层子目录,但如果遇到权限不足的系统目录、特殊隐藏文件或符号链接,可能会漏掉部分文件,但你这个情况的核心问题是统计方式错误。
修正后的代码
如果要统计所有文件数量,或者获取所有文件的完整路径用于备份复制,使用以下代码:
import os total_file_count = 0 all_full_file_paths = [] for current_dir, subdirs, files in os.walk('C:/Users/Name/Documents'): # 累加当前目录的文件数量 total_file_count += len(files) # 拼接文件完整路径(备份时必须用完整路径才能准确定位文件) for filename in files: full_path = os.path.join(current_dir, filename) all_full_file_paths.append(full_path) print(f"实际总文件数:{total_file_count}") print(f"完整文件路径列表长度:{len(all_full_file_paths)}")
额外注意事项
如果修正后仍存在文件缺失,检查以下几点:
- 权限限制:部分系统保护的子目录可能没有访问权限,
os.walk会自动跳过这些目录 - 符号链接:
os.walk默认followlinks=False,不会遍历符号链接指向的目录,若需要可设置os.walk(..., followlinks=True),但要注意避免循环引用 - 特殊文件:部分系统特殊文件可能不会被常规遍历获取,可根据需求单独处理
内容的提问来源于stack exchange,提问作者user14191647
相关产品推荐
相关产品推荐

