Python删除指定文件夹下所有目录中文件名后带有 (1)的重复文件

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) + "个")
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摘星喵Pro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值