Python重复文件清理小工具

针对电脑长期使用产生的重复文件,尤其是微信电脑版每转发一次生成一个重复文件的问题,用python写了一个批量清理重复文件的小工具,记录备用。

import shutil
import tkinter
from tkinter import filedialog
import os
import threading
import filecmpsrc_dir = ''
bak_dir = ''
file_list = []def src_dir_open():_dir = filedialog.askdirectory()if _dir:global src_dirsrc_dir = _dirlog_text.insert(tkinter.END, '##### 原始目录 - {}\n'.format(src_dir))def bak_dir_open():_dir = filedialog.askdirectory()if _dir:global bak_dirbak_dir = _dirlog_text.insert(tkinter.END, '##### 备份目录 - {}\n'.format(bak_dir))def on_key_press(event):return 'break'def run():if src_dir == '':log_text.insert(tkinter.END, '##### 未选择原始目录\n')returnif bak_dir == '':log_text.insert(tkinter.END, '##### 未选择备份目录\n')returnthread = threading.Thread(target=do_run)thread.start()def do_run():try:log_text.insert(tkinter.END, '##### 执行开始\n')global file_listfile_list = []get_file_list(src_dir)log_text.insert(tkinter.END, '##### 原始目录读取完毕\n')file_len = len(file_list)for i in range(0, file_len):file_i = file_list[i]if not os.path.exists(file_i):continuefor j in range(i + 1, file_len):file_j = file_list[j]if not os.path.exists(file_j):continueif os.path.dirname(file_i) != os.path.dirname(file_j):continueif not filecmp.cmp(file_i, file_j):continuelog_text.insert(tkinter.END, '① {}\n'.format(file_i))log_text.insert(tkinter.END, '② {}\n'.format(file_j))if os.path.getmtime(file_i) > os.path.getmtime(file_j):move_file(file_j)elif os.path.getmtime(file_i) < os.path.getmtime(file_j):move_file(file_i)breakelse:if file_i > file_j:move_file(file_j)else:move_file(file_i)breakexcept Exception as e:log_text.insert(tkinter.END, '##### {}\n'.format(e))finally:log_text.insert(tkinter.END, '##### 执行结束,重复文件已移除并被备份到 {}\n'.format(bak_dir))def get_file_list(path):if os.path.isfile(path):file_list.append(path)else:dir_list = os.listdir(path)for _dir in dir_list:get_file_list(os.path.join(path, _dir))def move_file(file):os.chmod(file, os.stat(file).st_mode | 0o222)path = bak_dir + os.path.dirname(file).replace(src_dir, '')if not os.path.exists(path):os.makedirs(path)shutil.move(file, os.path.join(path, os.path.basename(file)))log_text.insert(tkinter.END, '③ 移除 {}\n\n'.format(file))# 页面布局
root = tkinter.Tk()
root.title('重复文件清理')
root.state('zoomed')btn_frame = tkinter.Frame(master=root)
btn_frame.pack(side=tkinter.TOP, pady=10)src_dir_btn = tkinter.Button(master=btn_frame, text='选择原始目录', command=src_dir_open)
src_dir_btn.pack(side=tkinter.LEFT, padx=10)bak_dir_btn = tkinter.Button(master=btn_frame, text='选择备份目录', command=bak_dir_open)
bak_dir_btn.pack(side=tkinter.LEFT, padx=10)run_btn = tkinter.Button(master=btn_frame, text='开始执行', command=run)
run_btn.pack(side=tkinter.LEFT, padx=10)log_text = tkinter.Text(master=root, height=800)
log_text.pack(fill=tkinter.BOTH, expand=True)
log_text.bind('<Key>', on_key_press)scrollbar = tkinter.Scrollbar(master=log_text)
scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y)scrollbar.config(command=log_text.yview)
log_text.config(yscrollcommand=scrollbar.set)root.mainloop()

用pyinstaller打包成exe可执行文件方便使用

pyinstaller --onefile --noconsole --name duplicate_file_cleanup main.py

执行效果图

 下载地址 duplicate_file_cleanup.exe

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/707058.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字水印 | 奇异值分解 SVD 的 Python 代码实现

&#x1f951;原理&#xff1a;数字水印 | 奇异值分解 SVD 的定义、原理及性质 &#x1f951;参考&#xff1a;Python 机器学习笔记&#xff1a;奇异值分解&#xff08;SVD&#xff09;算法 正文 对于一个图像矩阵&#xff0c;我们总可以将其分解为以下形式&#xff1a; 通过…

轻松掌握Python中的延时技巧:time模块的妙用

在编程中&#xff0c;我们经常需要让程序暂停一段时间&#xff0c;以便进行某些操作或等待某些事件发生。Python提供了多种方式来实现延时&#xff0c;其中最常用的是time模块。本文将详细讲解如何使用time模块来实现延时操作&#xff0c;并提供几个实用的示例代码。 基本原理…

【Maven】Nexus简单使用

1、安装配置介绍Nexus私服&#xff1a; 安装配置指路上一篇详细教程博客 【Maven】Nexus私服简介_下载安装_登录-CSDN博客 简单介绍原有仓库类型&#xff1a; proxy代理仓库&#xff1a;代理远程仓库&#xff0c;访问全球中央仓库或其他公共仓库&#xff0c;将资源存储在私…

MySQL单表查询案例演示

目录 一、创建数据库lianxi 二、选择数据库为lianxi 三、新建一个数据表grade&#xff0c;在grade表中插入数据 四、开始进行查询操作&#xff08;验证表中数据&#xff09; 1、查询1945班的成绩信息 2、查询1945班&#xff0c;语文成绩大于60小于90的成绩信息 3、查询学…

Elasticsearch - HTTP

文章目录 安装基本语法索引创建索引查看索引删除索引 文档创建文档更新文档匹配查询多条件查询聚合查询映射 安装 https://www.elastic.co/downloads/past-releases/elasticsearch-7-17-0 下载完成启动bin/elasticsearch服务&#xff0c;可以在Postman调试各种请求。 基本语法…

wamp 安装 PHP8

最近的项目需求&#xff0c;需要将PHP 升级8使用&#xff0c;一直都是用wamp &#xff0c;所以需要在wamp集成PHP8 1、首先下载 php8 的包。地址&#xff1a; PHP: Downloadshttps://www.php.net/downloads.php 下载版本是目前最新的 PHP8.3.7&#xff0c;不要下载nts 版本&a…

动态规划高频问题(算法村第十九关白银挑战)

最少硬币数 322. 零钱兑换 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总…

各种姿势打穿企业内网

以前不是说要讲隧道吗&#xff1f;&#xff1f;&#xff1f; 鸽了这么久终于想起来了&#xff01;&#xff01;&#xff01; 1.本次实验环境拓扑 先来讲一下本次的实验环境吧&#xff0c;这样会更加清晰明了一点 首先我们是拿到了win7&#xff0c;然后最终目标上线内网的Wi…

ubuntu 计算器 gnome-calculator

sudo apt install gnome-calculator gnome-calculator

霍庭格TruPlasma MF 7100 7050电源现货50KW

霍庭格TruPlasma MF 7100 7050电源现货50KW

文档分类FastText模型 (pytorch实现)

文档分类FastText FastText简介层次softmaxN-gram特征FastText代码&#xff08;文档分类&#xff09; FastText简介 FastText与之前介绍过的CBOW架构相似&#xff0c;我们先来会议一下CBOW架构&#xff0c;如下图&#xff1a; CBOW的任务是通过上下文去预测中间的词&#xff0…

详解动态规划之01背包问题及其空间压缩(图文并茂+例题讲解)

1. 动态规划问题的本质 记忆化地暴力搜索所有可能性来得到问题的解 我们常常会遇到一些问题&#xff0c;需要我们在n次操作&#xff0c;且每次操作有k种选择时&#xff0c;求出最终需要的最小或最大代价。处理类似的问题&#xff0c;我们一般需要遍历所有的可能性(相当于走一遍…