当前位置:恩施知识网 > 科技创新 > 正文

你的手机是不是经常提示存储空间不足Python帮你清理重复文件

  最近我的手机经常提示存储空间不足,主要是微信和QQ群里接收的文件太多了,平时也没怎么整理。我把这些文件从手机里拷出来,打算整理一下,把该删的文件都删掉,把要备份的文件分门别类存到电脑或网盘上。我突然发现个问题,就是手机里有很多重复文件,文件名不一样,但是内容完全相同。这就搞得我很头疼,手动一个一个文件去对比,再删掉重复的文件会累死的。
  于是就有了个想法,用Python写一个小工具,把重复文件都给我列出来,我直接批量勾选删除就行了。
这个小工具是用Python3.8.10和wxP

  最近我的手机经常提示存储空间不足,主要是微信和QQ群里接收的文件太多了,平时也没怎么整理。我把这些文件从手机里拷出来,打算整理一下,把该删的文件都删掉,把要备份的文件分门别类存到电脑或网盘上。我突然发现个问题,就是手机里有很多重复文件,文件名不一样,但是内容完全相同。这就搞得我很头疼,手动一个一个文件去对比,再删掉重复的文件会累死的。

  于是就有了个想法,用Python写一个小工具,把重复文件都给我列出来,我直接批量勾选删除就行了。

这个小工具是用Python3.8.10和wxPython4.2.0开发的,主要解决这几个问题就能实现了:

遍历指定文件夹中的所有文件生成所有文件的MD5哈希值并保存在字典里,字典的key是哈希值,value是一个列表,列表存放所有哈希值一样的文件路径。为了不让界面卡死,在文件处理过程中,需要使用单独的线程。设计GUI,这里我是纯手工写的GUI代码。wxPython官方的示例很齐全,很多控件示例拷过来改改就可以了。调用系统函数打开文件、打开文件所在位置、删除文件。

下面贴几个段关键代码:

遍历文件

# 遍历文件,将所有文件的路径放入一个列表里def disk_walk(Filepath): path_collection = [] for dirpath, dirnames, filenames in os.walk(filepath): for file in filenames: fullpath = os.path.join(dirpath, file) path_collection.append(fullpath) return path_collection

生成文件MD5哈希值

# 生成文件的MD5值,通过比较文件的MD5值,就可以判定两个文件是否一致def make_hash(file_path): try: md5 = hashlib.md5() # 创建一个md5算法对象 with open(file_path, 'rb') as f: # 打开一个文件,必须是'rb'模式打开 while 1: data = f.read(1024) # 由于是一个文件,每次只读取固定字节 if data: # 当读取内容不为空时对读取内容进行update md5.update(data) else: # 当整个文件读完之后停止update break ret = md5.hexdigest() # 获取这个文件的MD5值 except OSError: print('Permission denied: %s' % file_path) return None return ret

文件大小格式化输出

# 文件大小格式化输出def FormatFileSize(size): for x in ['B', 'KB', 'MB', 'GB', 'TB', 'PB']: if size 单独线程处理遍历文件和生成MD5哈希值的任务 def PopulateList(self, path, info): self.info = info self.list.DeleteAllItems() self.record.clear() _thread.start_new_thread(self.Run, (path,)) def Run(self, filepath): # wx.BeginBusyCursor() files = disk_walk(filepath) count = len(files) self.gauge.SetRange(count) for idx, f in enumerate(files): hash_value = make_hash(f) if hash_value is None: continue if hash_value in self.record: df = self.record[hash_value] df.append(f) else: df = [f] self.record[hash_value] = df wx.PostEvent(self.list, UpdateListEvent(file=f, total=count, index=idx 1)) # wx.EndBusyCursor()

打开文件

# 打开文件 def OnOpenFile(self, event): index = self.list.GetFirstSelected() filepath = self.getColumnText(index, 3) os.startfile(filepath)

打开文件位置

# 打开文件所在位置 def OnOpenFileLocation(self, event): index = self.list.GetFirstSelected() filepath = self.getColumnText(index, 3) os.system(f'explorer /select, {filepath}')

删除勾选的文件

# 删除勾选的文件 def OnDeleteFile(self, event): itemcount = self.list.GetItemCount() itemschecked = [i for i in range(itemcount) if self.list.IsItemChecked(item=i)] if len(itemschecked) == 0: wx.MessageBox('请勾选需要删除的文件', '消息', wx.OK | wx.ICON_INFORMATION) else: rs = wx.MessageBox('确定要删除选中的文件吗?', '确认', wx.YES_NO | wx.ICON_WARNING) if rs == wx.YES: itemschecked.reverse() # 列表反转,从后往前删,避免因ListCtrl的Item索引变化而删除失败 for index in itemschecked: try: file_path = self.getColumnText(index, 3) os.remove(file_path) self.list.DeleteItem(index) except OSError: print('Permission denied: %s' % file_path)

wxPython有个自定义事件处理机制

先定义事件

# This creates a new Event class and a EVT binder function(UpdateListEvent, EVT_UPDATE_BARGRAPH) = wx.lib.newevent.NewEvent()

绑定事件到UI控件上

self.list.Bind(EVT_UPDATE_BARGRAPH, self.OnUpdate)

事件处理方法

def OnUpdate(self, event): self.info.SetLabel(event.file) self.gauge.SetValue(event.index) if event.index == event.total: self.info.SetLabel('已完成扫描')......

在独立线程中每处理完一个文件就触发事件,通知UI控件更新

wx.PostEvent(self.list, UpdateListEvent(file=f, total=count, index=idx 1))

你的手机是不是经常提示存储空间不足Python帮你清理重复文件

手机总是提醒存储空间不足怎么办

如果您使用的是华为手机,提示内存不足可以通过以下方法操作处理:
请您进入设置,查看存储剩余空间:
一、存储剩余空间不足(低于10%)
1. 清理存储空间
(1)建议卸载不常用的应用,下载过多应用会占用较大内存;
(2)清理手机空间:进入手机管家, 选择清理加速并勾选需要清理的数据 ,点击 删除 (已选 ),您还可以使用一键优化,根据扫描结果及清理建议,释放存储空间。
2. 检查是否使用了多个多用户/隐私空间
添加多用户和开启隐私空间会占用您的存储空间,建议您可以删除不使用的多用户或隐私空间:
(1)进入手机设置,搜索多用户,查看是否有已创建不使用的多用户,如果有,请您点击多用户,选择删除用户。
(2)进入手机设置,搜索隐私空间,查看是否有已创建不使用的隐私空间(显示开启表示您未创建隐私空间,显示进入表示您已创建了隐私空间),如果有,请您点击右上角三个点按钮,选择删除隐私空间。
(3)将大文件移动至存储卡中保存
如果您的手机支持插入外置存储卡,建议您插入外置存储卡后将手机内部存储中的图片、音频、视频等文件移至外置存储卡释放存储空间。
(4)将默认存储位置修改为存储卡
如果您的手机支持插入外置存储卡,建议您插入外置存储卡后进入设置>存储>默认存储位置,将默认存储位置修改为外置存储卡,这样也可以使手机本身内存不被过多占用。
(5)将手机恢复出厂设置
建议您备份好数据(微信/QQ等应用需单独备份),进入手机设置,搜索恢复出厂设置,根据手机界面提示完成恢复出厂设置操作。
二、存储剩余空间充足
1. 如果您手机是EMUI5.X的版本,请您备份好数据(微信/QQ等应用需单独备份)将系统升级至最新版本。早期版本存在“分身类应用在升级更新时提示内存不足”的问题。
2. 可能您在浏览器中访问了一些应用推广类网站,页面伪装提示手机剩余存储空间或运行内存不足来向您推广应用“优化”系统。建议先清理浏览器缓存,然后更新手机管家病毒库来拦截伪装的网站:
EMUI 8.X及以下: 手机管家 > 病毒查杀 > 设置,选择自动更新病毒库。
EMUI 9.X/10.X/11.X & MagicUI 2.X/ 3.X/4.0:手机管家 > 设置,选择自动更新病毒库/联网病毒查杀。
3. 系统更新升级失败,提示“内部存储不足,请至少删除XXX后重试”或者“空间不足无法升级”:系统升级需要预留一定的空间,请根据提示清理足够空间。

你的手机是不是经常提示存储空间不足Python帮你清理重复文件

手机总是被提醒内存不够怎么回事

vivo手机提示内存不足处理方法:
手机运行内存不足:
1、调出后台运行软件,一键加速清理后台;
2、卸载手机中不常用的软件(软件的进程、插件等会占用手机运行内存);
3、根据手机配置合理运行软件,若手机配置较低,尽量不要运行对配置需求较高的大型游戏;
4、进入手机设置--运存与存储空间--运行内存,开启内存融合,将RAM和ROM融合扩展,没有此选项则代表机型不支持。
手机存储空间不足 :
1、进入i管家--空间清理/空间管理--扫描并清理垃圾文件;
2、卸载手机中不常用的软件,避免不必要的内存占用;
3、进入文件管理,对手机中的视频、歌曲、压缩包等进行清理;
4、 部分支持SD卡的机型,可选择安装SD卡,将存储在手机中的数据移动到SD卡存储。
手机存储空间足够却提示内存不足 :
1、重启一下手机,查看是否恢复正常;
2、进入设置--系统管理/更多设置--备份与重置--还原所有设置,该操作会导致登录的第三方软件账号需要重新登录,但不会清除手机存储中的照片,视频等文件,请确认不影响某些第三方软件的使用后再进行还原所有设置操作。 避免操作出现异常导致数据丢失,建议先备份下手机的重要数据;
3、进入i管家--空间清理/空间管理--扫描并清理垃圾缓存;
4、必要时,请先备份好手机中的重要数据,进入设置--系统管理/更多设置--备份与重置--清除所有数据试试。
免责申明:以上内容属作者个人观点,版权归原作者所有,不代表恩施知识网立场!登载此文只为提供信息参考,并不用于任何商业目的。如有侵权或内容不符,请联系我们处理,谢谢合作!
当前文章地址:https://www.esly.wang/keji/21257.html 感谢你把文章分享给有需要的朋友!
上一篇:福州大学生戴上懒人眼镜后头晕这款眼镜你有没有在用 下一篇:注意了导致内存卡故障的四个原因是什么,内存卡槽坏了

文章评论