在我的rgb文件夹中,含有若干张图片,先使用os.listdir来查看一下这些图片的名字:

1
2
3
4
path = 'rgb'
all_pics=os.listdir(path)
for i in all_pics:
print(i)

输出图片名字:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
color_0000.jpg
color_0001.jpg
color_0002.jpg
color_0003.jpg
color_0004.jpg
color_0005.jpg
color_0006.jpg
color_0007.jpg
color_0008.jpg
color_0009.jpg
color_0010.jpg
color_0011.jpg
color_0012.jpg
...

现在,我希望将这些图片的名字中的color_前缀去掉,并且将00010013等前面多余的0给去掉,具体来说,将0001改成1,将0013改成13,其余同理进行处理。

先观察一下原始名字的结构,拿color_0001.jpg为例:

1
img='color_0001.jpg'
  1. 我们可以使用Python的字符串分割功能,将这个名字以下划线_分割为两部分:color0001.jpg,然后取第二部分0001.jpg
    代码如下:
    1
    img.split('_')[1]
  2. 对于0001.jpg,还是使用字符串分割功能,将其按照.分为两部分:0001jpg,取第一部分0001,使用int()0001强制转换成int数据类型;
    在上面的代码基础上做修改:
    1
    int(img.split('_')[1].split('.')[0])
  3. 在上面,我们已经得到修改后的名字,但还没有真正的执行重命名的命令。现在先使用os.path.joinpath与刚刚修改好的名字拼接起来作为重命名后图片的保存路径;
    继续修改代码如下:
    1
    os.path.join(path,str(int(im.split('_')[1].split('.')[0]))+".jpg")
  4. 现在就可以真正的实现重命名了,使用os.rename即可完成,代码如下:
    1
    os.rename(os.path.join(path,img),os.path.join(path,str(int(img.split('_')[1].split('.')[0]))+".jpg"))
    其中,os.rename的第一个参数是图片原始路径,第二个参数是重命名后的图片保存的路径,这里我直接保存在原始路径下,相当于用新的名字覆盖掉原始名字。如果你想保存在其他路径下,那么原始路径下的文件将不再存在(os.rename相当于重命名+剪切操作)。

以上是针对一张图片的操作,现在,使用for循环批量化处理,全部代码如下:

1
2
3
4
import os
path = 'rgb'
for im in os.listdir(path):
os.rename(os.path.join(path,im),os.path.join(path,str(int(im.split('_')[1].split('.')[0]))+".jpg"))

这样便完成了批量重命名图片文件的操作,核心代码就这一句:

1
os.rename(os.path.join(path,im),os.path.join(path,str(int(im.split('_')[1].split('.')[0]))+".jpg"))  

不妨试着查看一下修重命名后的图片名字:

1
2
3
all_pics=os.listdir(path)
for i in all_pics:
print(i)

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0.jpg
1.jpg
10.jpg
100.jpg
101.jpg
102.jpg
103.jpg
104.jpg
105.jpg
106.jpg
107.jpg
108.jpg
109.jpg
11.jpg
110.jpg

看,图片的名字已经成功被修改为我们所期望的了。