一种批量改写文件名为连续数字文件名的脚本

import glob
import os
import shutil
import sys
from pathlib import Path

IMG_FORMATS = 'bmp', 'dng', 'jpeg', 'jpg', 'mpo', 'png', 'tif', 'tiff', 'webp', 'pfm'  # include image suffixes

FILE = Path(__file__).resolve()
ROOT = FILE.parents[0]
if str(ROOT) not in sys.path:
    sys.path.append(str(ROOT))  # add ROOT to PATH
ROOT = Path(os.path.relpath(ROOT, Path.cwd()))  # relative


def increment_path(path, exist_ok=False, sep='', mkdir=False):
    # Increment file or directory path, i.e. runs/exp --> runs/exp{sep}2, runs/exp{sep}3, ... etc.
    path = Path(path)  # os-agnostic
    if path.exists() and not exist_ok:
        path, suffix = (path.with_suffix(''), path.suffix) if path.is_file() else (path, '')

        # Method 1
        for n in range(2, 9999):
            p = f'{path}{sep}{n}{suffix}'  # increment path
            if not os.path.exists(p):  #
                break
        path = Path(p)

        # Method 2 (deprecated)
        # dirs = glob.glob(f"{path}{sep}*")  # similar paths
        # matches = [re.search(rf"{path.stem}{sep}(\d+)", d) for d in dirs]
        # i = [int(m.groups()[0]) for m in matches if m]  # indices
        # n = max(i) + 1 if i else 2  # increment number
        # path = Path(f"{path}{sep}{n}{suffix}")  # increment path

    if mkdir:
        path.mkdir(parents=True, exist_ok=True)  # make directory

    return path


def run(path, start_num=0, Type='image', suffix=None):
    # path为文件夹路径, satrt_num为开始数字
    project = ROOT / 'runs'
    name = 'exp'

    File = []
    for p in path if isinstance(path, (tuple, list)) else [path]:
        files = []
        if os.path.isfile(p):
            files.append(p)  # files
        elif os.path.isdir(p):
            files.extend(sorted(glob.glob(os.path.join(p, '*.*'))))  # dir
        else:
            raise FileNotFoundError(f'{p} does not exist')
        if Type == 'image':
            File = [x for x in files if x.split('.')[-1].lower() in IMG_FORMATS]
        else:
            File = [x for x in files if x.split('.')[-1].lower() == Type]
    assert len(File) > 0, f'{path} 路径下没有指定文件,请确保路径正确'

    save_dir = increment_path(Path(project) / name, exist_ok=False)  # increment run
    save_dir.mkdir(parents=True, exist_ok=True)

    for i, f in enumerate(File):
        basename = os.path.basename(f)
        save_path = str(save_dir) + f'/{basename}'

        suffix = os.path.splitext(basename)[-1] if suffix is None else suffix

        rename_path = str(save_dir) + f'/{i + start_num}{suffix}'
        shutil.copy(f, save_path)
        os.rename(save_path, rename_path)


if __name__ == '__main__':
    path = "C:\\Users\\29731\\Desktop\\ee"  # 这里写自己的文件夹
    run(path, 0, 'image', '.png')  # 运行

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值