Python使用os.walk遍历驱动器时无法获取C盘PNG文件的问题求助
问题排查与解决
嗨,刚看了你的代码,发现两个关键问题导致你只拿到了D盘的PNG文件,还没法访问C盘内容:
1. 驱动器索引逻辑错误
你写的os.walk(drives[0-1])里,0-1计算后是-1,在Python列表里-1表示取最后一个元素,也就是你的['C:\\', 'D:\\']里的D:\\,所以代码只遍历了D盘,完全没碰C盘。
你需要循环遍历所有驱动器,而不是只取单个元素。
2. C盘权限访问问题
Windows系统的C盘里有很多系统目录(比如C:\Windows、C:\Program Files),普通用户权限下直接访问会抛出PermissionError,如果不处理这个异常,程序可能直接中断,或者跳过部分可访问的目录。
修正后的代码
import os # 先获取系统驱动器列表 drives = [ chr(x) + ":" for x in range(65,91) if os.path.exists(chr(x) + ":") ] print(f"检测到的驱动器: {drives}") counter = 0 target_ext = '.png' # 遍历所有找到的驱动器 for drive in drives: print(f"正在遍历驱动器: {drive}") try: # 遍历当前驱动器下的所有目录和文件 for root, dirs, files in os.walk(drive): for file in files: # 用endswith判断后缀,同时转小写避免大小写问题(比如.PNG、.Png) if file.lower().endswith(target_ext): counter += 1 print(os.path.join(root, file)) except PermissionError: print(f"无权限访问驱动器 {drive} 的部分目录,已跳过") print(f"总计统计到 {counter} 个PNG文件")
额外优化建议
- 用
file.lower().endswith(target_ext)代替inp in file,避免把比如test.png.txt这类文件误统计进去,同时兼容不同大小写的后缀。 - 如果统计的文件数量很多,频繁打印路径会拖慢程序,可以考虑只在最后打印总数,或者每统计1000个文件打印一次进度。
内容的提问来源于stack exchange,提问作者slste
相关产品推荐
相关产品推荐

