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项目精选实战案例 更多项目…

【Hive】窗口函数(移位函数案例、排序函数案例)(四)

Hive 窗口函数 分析函数 聚合函数&#xff0c;例如sum&#xff0c;avg&#xff0c;max&#xff0c;min等移位函数 lag(colName, n)&#xff1a;以当前行为基础&#xff0c;来处理第前n行的数据lead(colName, n)&#xff1a;以当前行为基础&#xff0c;来处理第后n行的数据nt…

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;则能更好地满足中…

实战使用Java代码操作Redis

实战使用Java代码操作Redis 1. 背景说明2. 单连接方式3. 连接池方式1. 背景说明 在工作中, 如果有一批数据需要初始化, 最方便的方法是使用代码操作Redis进行初始化。 Redis提供了多种语言的API交互方式, 这里以Java代码为例进行分析。    使用Java代码操作 Redis 需要借助…

积极向上的态度

非常欣赏您这种积极向上的态度&#xff01;以下是一些具体的建议&#xff0c;帮助您实现这些目标&#xff1a; 设定明确的目标&#xff1a; 将长期目标分解为短期、中期和长期的小目标。为每个小目标设定具体的完成时间和衡量标准。制定计划&#xff1a; 根据目标制定详细的工…

深度学习二分类任务之随机分配数据集

import os import random import shutildef random_sample_images(source_folders, output_folders, num_images_per_folder=4000):for source_folder, output_folder in zip(source_folders, output_folders):

十四、Redis Cluster集群

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

智慧景区AR导览手绘地图小程序系统开发源码搭建

智慧景区AR导览手绘地图小程序系统开发源码搭建需要以下步骤&#xff1a; 1. 确定系统需求和功能&#xff1a;了解智慧景区AR导览手绘地图小程序系统的需求和功能&#xff0c;包括地图绘制、AR导览、用户交互、数据管理等。 2. 选择开发平台和工具&#xff1a;选择适合的编程…

KMP 算法JavaScript代码实现

LeetCode 28. 找出字符串中第一个匹配项的下标 给定一个 haystack 字符串和一个 needle 字符串&#xff0c;在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在&#xff0c;则返回 -1。 示例 1: 输入: haystack "hello", needle &quo…

浅说文心一言

文心一言&#xff08;ERNIE Bot&#xff09;是一个基于Transformer结构的知识增强大语言模型&#xff0c;它可以根据用户的指令和输入&#xff0c;生成相应的回答或文本。以下是一些常见的指令示例&#xff0c;你可以根据需要进行调整&#xff1a; 问答指令&#xff1a; "…

rocketmq的流程

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

2024 年第四届长三角高校数学建模竞赛赛题浅析

一图流 赛道 题目难度 数据处理难度 模型难度 备注 A 高 低 高 需要物理模型和优化算法来预测物体在水中的行为和搜索策略&#xff0c;数据相对简单&#xff0c;主要挑战在于环境模拟和策略优化。 B 中等 高 中等 涉及大数据处理、特征工程、机器学习模型选择和调…

Linux quotacheck命令教程:如何检查和修复文件系统的磁盘配额(附案例详解和注意事项)

Linux quotacheck命令介绍 quotacheck命令是用于扫描文件系统以检查磁盘配额的一致性。它生成、检查和修复配额文件。这个命令通常在系统引导时运行&#xff0c;或者在手动更改了配额设置后运行。 Linux quotacheck命令适用的Linux版本 quotacheck命令在大多数Linux发行版中…

Poetry - Python 环境管理

文章目录 关于 poetry初始化项目从 0 创建项目已有项目中初始化环境 管理依赖库添加库查看依赖更新 管理环境查看有哪些虚拟环境删除环境 执行 python 脚本进入环境 manual 关于 poetry 官网&#xff1a;https://python-poetry.org官方文档&#xff1a;https://python-poetry.…