昨天晚上做了一件牛逼的事。这些年不时地备份拍的照片和视频,看了下居然10万+了。
重复的太多,浪费空间。
于是写了个小东西,根据拍照时间,文件名和文件大小,重新按照**年**月的格式重新整理了下,
保留了4万+
现在好闲,忍不住嘚瑟下,
正在冷备份中
具体思路如下:
# 目标-整理所有照片到固定的文件目录
# 如果大小不一致保留,保留大的
放在同一个列表中,统计出来,总共多少个文件,让心里清楚
import shutil
import os
done=1
n = 1
m = 1
start_folder = "E:-待整理-"
end_folder = 'E:test'
# 统计源目录的文件,并计算出个数。放到一个列表start-list、
start_list = []
for root, folders, files in os.walk(start_folder):
for file in files:
start_list.append(os.path.join(root, file))
# print(file)
for file in folders:
start_list.append(os.path.join(root, file))
# print(file)
print(len(start_list))
# 目前startlist里保留了所有的文件,格式为:E:--冲印--IMG_20210919_152649.jpg
打印结果出来,看一下,是否有特殊的字符,进行批量替换
开始文件名去重,清理文件名,并创建目录,目录名的格式为年月(6位),如202108
for name in start_list:
newname = name.split("")[-1] # 获取文件名
# 文件名整理。去掉img,mvimg,下换线等
filter1 = ['.mp4', '.avi', '.3gp', '.MOV', '.wmv']
filter2 = ['Screenshot']
filter3=['mmexport','microMsg.']
newname = newname.replace("_", "")
.replace("IMG", "")
.replace("img", "")
.replace("MVIMG", "")
.replace(".jpg", "")
.replace("@", "")
.replace(".db", '')
.replace(".py", '')
.replace("在重庆", "")
.replace("微信图片", "")
.replace("涂鸦Screenshot", "")
.replace("和目", "")
.replace("SMG9750", "")
.replace("SMG9550", "")
.replace("QQ图片", "")
.replace("PANO", "")
.replace("P21", "20100218")
.replace("MVIMG", "")
.replace("C36020", "20")
if newname in filter1:
newname = '视频文件合集'
elif newname in filter2:
newname = '--截图汇总--'
elif newname in filter3:
newname='微信导出的图片'
else:
newname = newname.split(".")[0][:6]
os.chdir(end_folder)
if not os.path.exists(newname):
os.mkdir(newname)
os.chdir(end_folder + newname)
oldfolderlist = []
for root, folders, files in os.walk(end_folder + newname):
for file in files:
oldfolderlist.append(file)
for file in folders:
oldfolderlist.append(file)
# if os.path.basename(name) in oldfolderlist:
size_new = os.path.getsize(name)
try:
size_old = os.path.getsize(end_folder + '' + newname + '' + os.path.basename(name))
print("比较大小新文件:老文件", size_new, size_old)
if size_old <= size_new:
os.remove(end_folder + '' + newname + '' + os.path.basename(name))
print(f"删除第{m}个小文件")
m += 1
except:
pass
try:
shutil.copy2(name, end_folder + newname)
done+=1
if 100000%done==0:
print(f"现在进行了{done}张")
except OSError as e:
print('发现一个文件夹', n, e)
n += 1
经过上面的处理,为防止出现错误而意外停止,所以做了一个跳过处理。
剩下的可以手动把同一年的文件夹放在一起了。