如何编写循环遍历emotion下所有子文件夹并批量清空其中的png图片
批量遍历子文件夹清空PNG文件的实现方案
核心逻辑
不需要手动枚举每个子文件夹路径,只需定义好emotion总目录的路径,通过Python内置的目录遍历接口自动获取所有子文件夹路径,复用已有的单文件夹删除逻辑即可完成批量操作,以下是两种适配不同场景的可直接运行的代码:
写法1:通用递归遍历(适配任意层级嵌套目录)
使用os.walk自动扫描整个目录树,无论子文件夹下有多少层嵌套结构,都能精准匹配到所有PNG文件:
import os # 替换为你自己的总目录实际路径 root_dir = r'C:\Users\emotion' for dir_path, _, file_names in os.walk(root_dir): for file_name in file_names: # 兼容大小写PNG后缀的文件 if file_name.lower().endswith('.png'): os.remove(os.path.join(dir_path, file_name))
说明:
os.walk会逐层扫描目标目录,依次返回当前遍历的文件夹完整路径、该路径下的子目录列表、该路径下的所有文件列表,无需手动拼接每个子文件夹的访问路径。
写法2:轻量直接子文件夹遍历(适配当前示例的目录结构)
如果确定PNG文件仅存在于emotion目录下的第一层直接子文件夹(也就是angry、disgusted、fearful、happy这类和emotion直接相邻的文件夹,不存在更深的嵌套目录),可以用更轻量的循环实现:
import os root_dir = r'C:\Users\emotion' # 筛选出总目录下的所有子文件夹路径 all_sub_folders = [ os.path.join(root_dir, entry) for entry in os.listdir(root_dir) if os.path.isdir(os.path.join(root_dir, entry)) ] # 对每个子文件夹执行原有删除逻辑 for folder in all_sub_folders: for img_name in os.listdir(folder): if img_name.lower().endswith('.png'): os.remove(os.path.join(folder, img_name))
实操提醒
- 文件删除为不可逆操作,首次运行前可临时将
os.remove()替换为print(os.path.join(dir_path, file_name)),打印所有待删除路径做校验,避免误删其他非目标文件 - 代码中加入了
.lower()做后缀兼容,可覆盖后缀为大写.PNG的文件,比仅匹配小写.png的判断逻辑更严谨 - 后续如果需要支持其他格式的图片,只需修改
endswith的匹配规则,无需改动整体循环结构
内容的提问来源于stack exchange,提问作者sirimiri
相关产品推荐
相关产品推荐

