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') # 运行
一种批量改写文件名为连续数字文件名的脚本
最新推荐文章于 2025-04-28 08:44:47 发布