如何统一数据集文件名及后缀名
本文最后更新于 35 天前,其中的信息可能已经有所发展或是发生改变。

一、环境准备

  1. 下载并安装pycharm
https://www.jetbrains.com/pycharm/download/
  1. 文件结构建议
├── main.py      # 本代码文件
├── img/                # 源文件夹(建议存放待处理图片)
│   └── image/          # 实际源图片目录
└── target_data/          # 自动创建的目标文件夹
  1. 复制代码到main.py文件,内容如下:
import os
import os.path as osp
import numpy as np
import cv2

def cy_imread_chinese(file_path):
    """支持中文路径图片读取"""
    try:
        img_array = np.fromfile(file_path, dtype=np.uint8)
        cv_img = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
        if cv_img is None:
            raise ValueError("无法解码图像文件: " + file_path)
        return cv_img
    except Exception as e:
        raise RuntimeError(f"读取文件失败: {file_path}") from e

def folder_rename(src_folder_path, target_folder_path):
    """迁移并重命名图片文件"""
    # 创建目标文件夹
    os.makedirs(target_folder_path, exist_ok=True)
    
    # 获取源文件列表
    try:
        file_names = os.listdir(src_folder_path)
    except FileNotFoundError:
        raise
    except PermissionError:
        raise
    
    # 处理文件
    for i, file_name in enumerate(file_names):
        print(f"{i}:{file_name}")
        
        # 构建完整路径
        src_path = osp.join(src_folder_path, file_name)
        if not osp.isfile(src_path):
            continue  # 跳过子目录
            
        try:
            # 读取源文件(支持中文路径)
            img = cy_imread_chinese(src_path)
            
            # 生成新文件名
            new_filename = f"train_data_{i:04d}.jpg"  # 0000格式编号
            dst_path = osp.join(target_folder_path, new_filename)
            
            # 写入新文件(使用cv2保存)
            cv2.imwrite(dst_path, img)
            
            # 可选:删除原文件(谨慎使用!)
            # os.remove(src_path)  
            
        except Exception as e:
            print(f"处理文件失败: {file_name} - {str(e)}")
            continue

if __name__ == '__main__':
    try:
        # 使用实际路径替换
        folder_rename(
            src_folder_path="img/image", 
            target_folder_path="target_data/image"
        )
    except FileNotFoundError as e:
        print(f"路径不存在: {e.filename}")
    except PermissionError as e:
        print(f"权限不足: {e.filename}")
    except Exception as e:
        print(f"未处理异常: {type(e).__name__} - {str(e)}")
    finally:
        print("操作执行完毕")
  1. 安装依赖库
# macos系统如果权限不足可以加上sudo

# 配置清华源(一劳永逸)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

#安装numpy
pip install numpy

# 然后安装opencv-python
pip install opencv-python

---

二、参数配置

修改代码最后一行的路径参数:

# 原始调用代码
folder_rename(
    "img/image",          # 源文件夹路径(需替换为实际路径)
    "target_data/image"  # 目标文件夹路径(自动创建)
)

---

三、运行方式

方式1:命令行运行

python main.py

方式2:IDE运行

直接使用PyCharm/VSCode等工具运行脚本


四、执行效果演示

假设源文件夹内容:

img/image/
    ├── 测试图片1.jpg
    ├── photo(2).png
    └── IMG_2023.jpg

运行后将生成:

target_data/image/
    ├── train_data_0.jpg
    ├── train_data_1.jpg
    └── train_data_2.jpg

---

五、关键功能说明

  1. ‌中文路径支持‌

    1. 使用np.fromfile+cv2.imdecode读取中文路径文件
  2. ‌自动创建目录‌

    1. 目标文件夹不存在时会自动创建
  3. ‌格式统一化‌

    1. 强制输出为.jpg格式

    2. 文件名格式化为train_data_序号.jpg

  4. ‌安全重命名‌

    1. 使用os.rename进行文件移动操作

六、常见问题处理

问题现象 解决方案
FileNotFoundError 检查源路径是否存在,路径使用/而非
图片损坏警告 确认源文件是否为有效图片格式
权限错误 以管理员身份运行/修改目标文件夹权限
中文乱码 确保IDE使用UTF-8编码

七、高级使用技巧

‌修改命名规则‌修改格式字符串:

"train_data_{}.jpg".format(i) → "dataset_{:04d}.png".format(i)

‌添加文件过滤‌在循环内添加判断:

if not file_name.lower().endswith(('.png', '.jpg')):
    continue

‌保留原始文件‌注释掉os.rename行,仅保留:

cv2.imwrite(target_path, src_img)

---

八、注意事项

  1. ‌数据备份‌

    1. 建议先在小样本文件夹测试

    2. 重要数据提前备份

  2. ‌路径规范‌

    1. 使用英文路径可避免编码问题

    2. 不要使用系统保留字符(如*?等)

  3. ‌性能优化‌

    1. 处理万级图片时建议添加进度条

    2. 大文件处理需注意内存占用

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇