示例:利用Python对多个文件夹的文件按统一规则命名

需求描述

在文件夹“Image01-10”目录下,有10个文件夹,每个文件夹都有20个图片,编号从1.jpg – 19.jpg。由于每次查看都要在多个文件夹下转来转去比较麻烦,所以希望将这个图片放在同一个文件夹中。在命名时,采用统一的格式为 目录名+文件名,同时文件名均采用两位编号。比如 “Image01/1.jpg”,更名后为“01_01.jpg”。

 Image01-10
   ├─Image01
   │      0.jpg
   │      1.jpg
   │      10.jpg
   │      11.jpg
   │      12.jpg
   │      13.jpg
   │      14.jpg
   │      15.jpg
   │      16.jpg
   │      17.jpg
   │      18.jpg
   │      19.jpg
   │      2.jpg
   │      3.jpg
   │      4.jpg
   │      5.jpg
   │      6.jpg
   │      7.jpg
   │      8.jpg
   │      9.jpg
   │
   ├─Image02
   ├─Image03
   ... 
   └─Image10 

分析

这是一个的文件复制的需求,包括文件夹遍历、字符串格式化和文件复制的操作,总体难度不大。只需要针对以上三点处理好即可。
文件夹遍布:os.listdir(dir)
字符串格式化:"".format()
文件复制:copyfile(source, dest)
判断文件后缀:"".endWidth(extension)

编码实现

import os
from shutil import copyfile # 提供 copyfile(source, dest) 函数用于文件复制。

# 将文件复制至当前目录下的All文件夹中,所以先对其进行创建
if not os.path.exists("all"):
	os.mkdir("all")

for i in range(10):
    id = "{0:0>2d}".format(i+1) # 获得用0填充的长度为2的编号,如 1 -> 01
    dir = "Image" + id # 文件夹ID
    for file in os.listdir(dir):
        file = file.lower() # 避免文件大小写问题
        if file.endswith('.jpg'):
            source = "{0}\\{1}".format(dir, file)
            dest = "all\\" + id + "_" + ('0' + file if len(file) == 5 else file)
            print("{0} -> {1}".format(source, dest))
            copyfile(source, dest)   # 复制操作

执行结果

> python mergeimages.py
Image01\0.jpg -> all\01_00.jpg
Image01\1.jpg -> all\01_01.jpg
Image01\10.jpg -> all\01_10.jpg
Image01\11.jpg -> all\01_11.jpg
Image01\12.jpg -> all\01_12.jpg
Image01\13.jpg -> all\01_13.jpg
Image01\14.jpg -> all\01_14.jpg
Image01\15.jpg -> all\01_15.jpg
Image01\16.jpg -> all\01_16.jpg
Image01\17.jpg -> all\01_17.jpg
Image01\18.jpg -> all\01_18.jpg
Image01\19.jpg -> all\01_19.jpg
Image01\2.jpg -> all\01_02.jpg
Image01\20.jpg -> all\01_20.jpg
...
Image10\0.jpg -> all\10_00.jpg
Image10\1.jpg -> all\10_01.jpg
Image10\10.jpg -> all\10_10.jpg
Image10\11.jpg -> all\10_11.jpg
Image10\12.jpg -> all\10_12.jpg
Image10\13.jpg -> all\10_13.jpg
Image10\14.jpg -> all\10_14.jpg
Image10\15.jpg -> all\10_15.jpg
Image10\16.jpg -> all\10_16.jpg
Image10\17.jpg -> all\10_17.jpg
Image10\18.jpg -> all\10_18.jpg
Image10\19.jpg -> all\10_19.jpg
Image10\2.jpg -> all\10_02.jpg
Image10\20.jpg -> all\10_20.jpg
Image10\3.jpg -> all\10_03.jpg
Image10\4.jpg -> all\10_04.jpg
Image10\5.jpg -> all\10_05.jpg
Image10\6.jpg -> all\10_06.jpg
Image10\7.jpg -> all\10_07.jpg
Image10\8.jpg -> all\10_08.jpg
Image10\9.jpg -> all\10_09.jpg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值