前言

前几天把手机图片迁移到了电脑,但是名称全是乱的,实在是看着不舒服,因此用Python实现了一个按照时间对文件进行批量重命名的脚本。

最初版本(只能进行编号 )

以前写过一个,但没想着用时间来命名,只进行了简单的编号

效果预览

代码展示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# -*- coding:utf8 -*-
# 用来给图片批量有序命名
import os
from re import M


class BatchRename():
'''
批量重命名文件夹中的图片文件
'''

def __init__(self):
self.path = 'D:/Download/图片/新建文件夹/bili' # 存放图片的文件夹路径

def rename(self):
filelist = os.listdir(self.path)
total_num = len(filelist)
i = 1 # 代表图片从i开始命名
m = 0
l = 0
n = 0
for item in filelist:
# 若图片格式为jpg
if item.endswith('.jpg'):
end = '.jpg'
m = m + 1
elif item.endswith('.png'):
end = '.png'
l = l + 1
elif item.endswith('.webp'):
end = '.webp'
n = n + 1

src = os.path.join(os.path.abspath(self.path), item)
srcName = src.split('\\')[-1] # python的集合取-1就是最后一个元素,-2就是倒数第二个。。真好用
dst = os.path.join(os.path.abspath(self.path),'dm-' + str(i) + end) # 设置新的图片名称。这里是 dm-i
dstName = dst.split('\\')[-1]
try:
os.rename(src, dst)
print("把 %s 重命名为 %s" % (srcName, dstName))
i = i + 1
except:
continue

print("总共 %d 个图片,本次重命名了 %d 个图片。其中 %d 个 jpg,%d 个 png,%d 个 webp" % (total_num, i-1, m, l, n))


if __name__ == '__main__':
demo = BatchRename()
demo.rename()

效果预览


代码展示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import os
import time

'''
根据文件的修改时间,对大量文件进行重命名,并保留其后缀名。
'''

# 根据文件修改时间,获取文件的时间戳函数
def get_file_date(filepath, format):
'''
获取文件的时间戳,这里主要返回文件的时间,原时间一般为修改时间
st_atime (访问时间), st_mtime (修改时间), st_ctime(创建时间)
'''
statinfo = os.stat(filepath)
temp_time = time.localtime(statinfo.st_mtime)
return time.strftime(format, temp_time)

# 主函数
if __name__ == "__main__":
count = 0
dirname = r'D:\Download\bili' # 文件所在目录
os.chdir(dirname) # 切换至文件所在目录
basenames = os.listdir(dirname)
format = '%Y%m%d-%Hh%Mm%Ss' # 格式化文件名(时间格式)
a = 0
b = 0
c = 0
d = 0
for basename in basenames:
filepath = dirname+'\\'+basename
str_time = str(get_file_date(filepath, format)) # 获取文件的修改时间
# 重命名
file_suffix = os.path.splitext(basename)[1] # 后缀名。splitext可以分离文件名和拓展名
if file_suffix == '.jpg':
a = a + 1
elif file_suffix == '.png':
b = b + 1
elif file_suffix == '.webp':
c = c + 1
else:
d = d + 1
try:
# 若不想以时间命名,也可以删除 str_time 相关,自拟名字。例如:newname = 'dm-'+str(i)+file_suffix
newname = str_time+file_suffix # 新名字为文件根据时间格式化后的 名字str_time+后缀file_suffix
os.rename(basename, newname)
print(basename+' To '+newname)
except Exception as e:
if e.args[0] == 17: # 若重名
i = 1
# 设置一个循环来实现时间重名时的计数逻辑
while True:
try:
newname = str_time+'_'+str(i)+file_suffix
os.rename(basename, newname)
print(basename+' To '+newname)
break
except Exception as e:
i = i+1
continue
else:
print(e) # 命名失败,报异常

print('全部重命名完成,共更改了 %d 个文件。其中 %d 个 jpg,%d 个 png,%d 个 webp' % (a+b+c+d, a, b, c))