如何基于CSV文件条件用Python创建子目录并分类移动JPG图片
基于Python按CSV条件分类移动JPG图片的实现方法
前置说明
你当前的环境结构如下:
- 根目录
- File1.jpg
- File2.jpg
- File3.jpg
- File4.jpg
- 记录文件对应关系的CSV文件(假设文件名为
file_map.csv)
CSV文件结构:
| Filenames | cond |
|---|---|
| File1.jpg | 1 |
| File2.jpg | 0 |
| File3.jpg | 1 |
| File4.jpg | 0 |
需要实现的效果是根目录下生成Subdir1、Subdir0两个子目录,对应存放cond为1和0的图片。
实现步骤
依赖说明
只需要Python自带的标准库即可,无需安装第三方依赖。
完整可运行代码
把代码放在根目录运行即可,注意替换代码里的CSV文件名为你实际的文件名:
import os import shutil import csv # 配置参数 root_dir = os.getcwd() # 默认为当前脚本所在的根目录,可手动替换为实际根目录绝对路径 csv_path = os.path.join(root_dir, "file_map.csv") # 替换为你的CSV实际文件名 subdir_1 = os.path.join(root_dir, "Subdir1") subdir_0 = os.path.join(root_dir, "Subdir0") # 1. 创建两个子目录,已存在的话不会重复创建报错 os.makedirs(subdir_1, exist_ok=True) os.makedirs(subdir_0, exist_ok=True) # 2. 读取CSV映射关系并移动文件 with open(csv_path, mode='r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: filename = row['Filenames'].strip() cond = row['cond'].strip() src_path = os.path.join(root_dir, filename) # 确认源文件存在再执行移动操作 if os.path.exists(src_path): if cond == '1': dst_path = os.path.join(subdir_1, filename) else: dst_path = os.path.join(subdir_0, filename) shutil.move(src_path, dst_path) else: print(f"警告:未找到文件 {filename},已跳过")
注意事项
- 如果你的CSV文件是GBK编码,把
open方法里的encoding='utf-8'改成encoding='gbk'即可 - 代码加了源文件存在性校验,不会因为CSV里写了不存在的文件名中断运行
- 重复运行代码不会重复创建目录,已经移动走的文件会触发不存在警告,不影响正常使用
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

