一行代码搞定文件批量重命名
在我的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 |
看,图片的名字已经成功被修改为我们所期望的了。