使用os.walk()遍历目录时遇到.DS_Store文件报错如何解决?
可行解决方法
报错核心原因有两个:一是macOS会自动在目录下生成隐藏的.DS_Store系统文件,会被os.walk()正常扫描到;二是操作文件时大概率没有拼接当前遍历的根路径,直接用了文件名导致路径不匹配。可以按以下任意一种方案处理:
- 方案1:直接过滤
.DS_Store文件(最适配当前场景)
在获取到files列表后直接剔除.DS_Store,不需要对这类系统文件执行重命名操作,修改后的代码如下:
for path, subdirs, files in os.walk(folder_path): # scroll_count = 1 # panel_count = 1 files.sort() # 新增过滤逻辑 files = [f for f in files if f != '.DS_Store'] # 后续你的重命名逻辑
- 方案2:操作文件时拼接完整路径(解决路径不匹配问题)
很多时候报错是因为直接用f作为文件路径,没有拼接当前遍历的目录路径path,导致程序找不到对应文件,正确的文件路径写法如下:
import os for path, subdirs, files in os.walk(folder_path): files.sort() for f in files: # 必须拼接完整路径才能正确定位文件 full_file_path = os.path.join(path, f) # 后续用full_file_path执行重命名等操作
- 方案3:通用过滤所有隐藏文件(适配更复杂的场景)
如果需要同时过滤掉所有.开头的macOS系统隐藏文件,可以扩展过滤逻辑:
for path, subdirs, files in os.walk(folder_path): files.sort() # 过滤所有以.开头的隐藏文件 files = [f for f in files if not f.startswith('.')] # 后续业务逻辑
补充说明:
.DS_Store是macOS Finder用来存储文件夹视图属性、图标位置等信息的隐藏文件,只要用Finder打开过的目录都会自动生成,不需要对这类文件执行业务操作,直接过滤即可。
内容的提问来源于stack exchange,提问作者Phani Teja
相关产品推荐
相关产品推荐

