一行代码搞定文件批量重命名
在我的rgb文件夹中,含有若干张图片,先使用os.listdir来查看一下这些图片的名字:
1 | path = 'rgb' |
输出图片名字:
1 | color_0000.jpg |
现在,我希望将这些图片的名字中的color_前缀去掉,并且将0001,0013等前面多余的0给去掉,具体来说,将0001改成1,将0013改成13,其余同理进行处理。
先观察一下原始名字的结构,拿color_0001.jpg为例:
1 | img='color_0001.jpg' |
- 我们可以使用Python的字符串分割功能,将这个名字以下划线
_分割为两部分:color,0001.jpg,然后取第二部分0001.jpg;
代码如下:1
img.split('_')[1]
- 对于
0001.jpg,还是使用字符串分割功能,将其按照.分为两部分:0001和jpg,取第一部分0001,使用int()将0001强制转换成int数据类型;
在上面的代码基础上做修改:1
int(img.split('_')[1].split('.')[0])
- 在上面,我们已经得到修改后的名字,但还没有真正的执行重命名的命令。现在先使用
os.path.join将path与刚刚修改好的名字拼接起来作为重命名后图片的保存路径;
继续修改代码如下:1
os.path.join(path,str(int(im.split('_')[1].split('.')[0]))+".jpg")
- 现在就可以真正的实现重命名了,使用
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 | import os |
这样便完成了批量重命名图片文件的操作,核心代码就这一句:
1 | os.rename(os.path.join(path,im),os.path.join(path,str(int(im.split('_')[1].split('.')[0]))+".jpg")) |
不妨试着查看一下修重命名后的图片名字:
1 | all_pics=os.listdir(path) |
输出:
1 | 0.jpg |
看,图片的名字已经成功被修改为我们所期望的了。










