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.mzph.cn/news/838670.shtml

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

相关文章

美港通正规股票交易市场人民币突然拉升,市场开启“大风车”模式?

查查配今天上午,市场又开启了“大风车”模式,多个热点轮番拉升。 一则关于地产行业利好的小作文流出,地产产业链上午爆发,租售同权、房地产服务、房地产开发等板块大涨,光大嘉宝、天地源等个股涨停。万科A涨超4%。 美港通证券以其专业的服务和较低的管理费用在市场中受到不少…

如何在Sui智能合约中验证是否为多签地址

通过多签合约实现多个用户可访问的安全账户。多签&#xff08;multi-sig&#xff09;钱包和账户通过允许多个用户在预定义条件下访问共享资产&#xff0c;或让单个用户实施额外的安全措施&#xff0c;从而增强密钥管理。例如&#xff0c;多签钱包可以用于管理去中心化自治组织&…

智慧教育平台:选课系统的Spring Boot实现

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 &#x1f345;获取源码联系方式请查看文末&#x1f345; 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目…

Verilog基础语法——条件语句if-else与case

Verilog基础语法——条件语句case、if-else 写在前面一、if-else语句二、case语句2.1 case语句2.2 casez语句2.3 casex语句 写在后面 写在前面 在Verilog语法中&#xff0c;常用的条件语句有if-else语句和case语句&#xff0c;用于判断条件是否为真&#xff0c;并执行判断条件后…

第 N 个泰波那契数

题目链接 第 N 个泰波那契数 题目描述 注意点 0 < n < 37答案保证是一个 32 位整数 解答思路 动态规划根据前三个数字推出新的泰波那契数 代码 class Solution {public int tribonacci(int n) {if (n 0) {return 0;}if (n 1 || n 2) {return 1;}int x 0;int x…

JSON格式化输出html——数组+对象+JSON字符串+汉字——基础积累——@pgrabovets/json-view

昨天写了一篇关于JSON格式化输出到页面上——数组对象JSON字符串汉字——基础积累的文章&#xff0c;效果是可以实现的 但是如果要实现右侧部分的展开/折叠&#xff0c;则可以使用到下面的插件了pgrabovets/json-view github链接&#xff1a;https://github.com/pgrabovets/j…

软考笔记随记

原码:(0正1负) 原码是最直观的编码方式,符号位用0表示正数,用1表示负数,其余位表示数值的大小。 例如,+7的原码为00000111,-7的原码为10000111。 原码虽然直观,但直接用于加减运算会导致计算复杂,且0有两种表示(+0和-0),不唯一。 反码: 反码是在原码的基础上得…

如何在VS Code中安装插件并进行中文化。

相关文章推荐: 如何下载和安装Visual Studio Code&#xff08;VSCode&#xff09; 在使用Visual Studio Code&#xff08;简称VS Code&#xff09;进行开发时&#xff0c;安装插件可以极大地提升开发效率和使用体验。而将VS Code插件界面进行中文化&#xff0c;则能更好地满足中…

十四、Redis Cluster集群

Redis Cluster是Redis提供的一个分布式解决方案&#xff0c;在3.0推出。Redis Cluster可以自动将数据分片分布到不同的master节点上&#xff0c;同时提供了高可用的支持&#xff0c;当某个master节点挂了之后&#xff0c;整个集群还是可以正常工作。1、为什么要用Redis Cluster…

rocketmq的流程

生产过程 消费过程 存储 在RocketMQ中&#xff0c;一个Broker的所有Topic的消息都会被写入到同一个CommitLog文件中。 每个队列&#xff08;Queue&#xff09;都有对应的ConsumeQueue文件。 ConsumeQueue每个记录定长&#xff0c;20字节&#xff0c;消息在commitlog中的偏移量…

外贸客户采集软件有哪些?

外贸客户采集软件可以帮助企业收集潜在客户的信息&#xff0c;以便进行市场分析和客户开发。以下是一些常用的外贸客户采集软件&#xff1a; 易谷歌地图数据采集大师&#xff1a;基于谷歌地图数据采集的软件&#xff0c;能够采集任意国家、地区的企业地址、电话号码、邮件地址等…

SpringCloud 2023.0.1

本文介绍如何使用 springboot3及cloud2023 进行微服务模块化开发 采用父-module 模块开发 父工程 demo-java pom.xml <!--配置 springboot的依赖的版本号, 方便 module 进行继承--><dependencyManagement><dependencies><!--增加 springboot的依赖--&g…

浅谈-数据分析之道--数据思维的培养

第一篇数据思维 数据分析中最重要的是数据思维&#xff0c;对于业务场景中常见的问题&#xff0c;只要有分析问题的思路和方法&#xff0c;无论用什么工具都可以得到结果。 数据思维是数据分析师分析问题的思路和角度。 第一章&#xff0c;什么是数据思维 什么是数据治理&a…

适合建站的香港服务器有哪些,企业和个人建站的

香港服务器适合外贸建站、个人和企业建站&#xff0c;尤其是中小企业官网非常适合放在香港服务器上&#xff0c;因为香港服务器在国内外的访问速度都很快&#xff0c;也就意味着全球客户都能访问到你的网站。 对于很多新手小白来说不知道怎么才能买到靠谱稳定的香港服务器&…

mysql主从热备+keepalived 部署mysql高可用主备模式

目录 1、环境准备 2、分别在主服务器和备用服务器上安装keepalived 3、修改keepalived服务的配置文件 3.1 修改主服务器上的keepalive服务的配置文件 3.2 修改备用服务器上的keepalive服务配置文件 4、编写mysql监控脚本放到主服务器上 5、在主服务器和备用服务器上查看…

水泡传感器内部结构

水泡传感器内部结构&#xff1a; 水泡传感器放大电路 电路是基于1.6V做的TIA I2V&#xff0c; 也就是输出部分基于1.6V做电压的增加或减少。

Milvus 快速入门

引言 在本篇文章中&#xff0c;我们将介绍 Milvus 的基本概念&#xff0c;并通过一个简单的示例展示如何在 Milvus 中创建集合、插入向量和执行搜索。最后&#xff0c;我们将概览 Milvus 提供的 API。 一、基本概念 1.1 集合 (Collection) 在 Milvus 中&#xff0c;集合类似…

如何组织 Vue 项目

介绍 在启动 Vue 项目时&#xff0c;思考项目结构至关重要。主要考虑因素是预期项目的规模。在本篇博文中&#xff0c;我将探讨适用于不同规模 Vue 项目的各种结构。这个考虑与康威定律相吻合&#xff1a; “设计系统的组织受限于产生这些组织沟通结构的设计。” - 梅尔康威 基…

C语言之指针初阶

目录 前言 一、内存与地址的关系 二、指针变量 三、野指针 四、const 五、传值调用与传址调用 总结 前言 本文主要介绍C语言指针的一些基础知识&#xff0c;为后面深入理解指针打下基础&#xff0c;因此本文内容主要包括内存与地址的关系&#xff0c;指针的基本语法&…

WebRTC实时音视频通话之语音通话设计与实践

一、背景 在移动互联网流量时代&#xff0c;很多业务场景都有音视频通信的需求&#xff0c;比如IM场景&#xff0c;除了文字交流还需要音视频通话进行实时交互。为了帮助58、赶集、安居客等业务线更好的为用户提供服务&#xff0c;节约沟通成本&#xff0c;提升效率&#xff0…