Python删除指定文件夹下所有目录中文件名后带有 (1)的重复文件
最近下载视频,不知道是点多了还是下载器的问题,所有文件都多了一份文件名后带有 (1),有几千个重复文件太多了,写个程序清理一下
问题效果:
程序:
只能清理后缀名为3个字符的文件比如.zip/.mp4,要清理其它长度改一下程序中的字符串切片判断就可以了
import os
from collections import defaultdict
#存放所有文件的字典key是目录,value是多个文件
dictFile = defaultdict(list)
for fpathe, dirs, fs in os.walk(r"指定文件夹目录"):
for f in fs:
print(fpathe + '/' + f)
dictFile[fpathe+'/'].append(f)
deleteCount=0
for key in dictFile:
print(key)
print(dictFile[key])
for value in dictFile[key]:
if value[-8:-4] == " (1)":
print("进行重名查找:"+value)
fName=value[0:-8]+value[-4:];
if(fName in dictFile[key]):
print('已找到:'+key+fName)
os.remove(os.path.join(key, value))
deleteCount+=1
print('已删除重名文件:'+value)
print('--------------------------------------')
else:
print("False 未找到")
print("共删除重复文件:"+str(deleteCount)+"个")
运行效果
指定文件夹下所有目录中文件名后带有 (1)的文件就被删除了
终于干净了!!!
删除不带" (1)“的重复文件,保留带” (1)"的:
import os
import re
from collections import defaultdict
# 存放所有文件的字典,key是目录,value是多个文件
dictFile = defaultdict(list)
for fpathe, dirs, fs in os.walk(r"/Users/cat/Downloads/tt"):
for f in fs:
print(fpathe + '/' + f)
dictFile[fpathe+'/'].append(f)
deleteCount = 0
preserveCount = 0
# 正则表达式匹配中英文括号
re_brackets = re.compile(r'[\(\)()]')
for key in dictFile:
print(key)
print(dictFile[key])
preserve_files = [] # 用于存放带 "(1)" 结尾的文件
remove_files = [] # 用于存放不带 "(1)" 结尾但内容相同的文件
for value in dictFile[key]:
# 在括号前后增加空格
value_with_space = re_brackets.sub(r' \g<0> ', value)
if value.endswith(" (1)"):
preserve_files.append(value_with_space)
else:
# 判断是否有对应带 "(1)" 结尾的文件,如果有则加入删除列表,否则加入保留列表
fName = value[0:-4] + " (1)" + value[-4:]
if fName in dictFile[key]:
remove_files.append(value_with_space)
else:
preserve_files.append(value_with_space)
# 删除不带 "(1)" 结尾的文件
for value in remove_files:
print('删除文件:' + os.path.join(key, value))
os.remove(os.path.join(key, value.strip())) # 移除额外空格
deleteCount += 1
print('已删除重名文件:' + value)
print('--------------------------------------')
# 输出保留的带 "(1)" 结尾的文件
for value in preserve_files:
print('保留文件:' + os.path.join(key, value))
preserveCount += 1
print('--------------------------------------')
print("共删除重复文件:" + str(deleteCount) + "个")
print("共保留重复文件:" + str(preserveCount) + "个")