背景
今天不得不说一说我这个电脑的事情。我这个电脑是2年前买的,屏幕非常大,是16寸的。
基本上没什么缺点,就是每隔一年,就要处理一下储存问题。
为什么呢,因为我的这台电脑的储存是512G的。所以不是太大。
但是今天早上,我发现:512G的内存,只剩下130多G了。算了算了,要那就清除一下垃圾吧。
然后就打开一个清理软件开始清理。
打开软件
这个软件,其实挺好用的。可以扫描文件,相关的功能比较优秀:
- 智能扫描:会统计相关的垃圾文件、大文件、重复文件、相似图片等。
- 下面几个选项,会把上面几个部分全部都展开,非常的详细。
而且还会显示电脑的相关细节:
- CPU使用情况
- 内存占用
- 垃圾文件
- 网络使用情况等
转折
你以为我是要推荐这个软件了么?
笑话
并不是
因为这个软件是收费的,很多地方不给钱,用不了。
重复文件删除需要收费
这个软件,删除相似的文件,竟然是收费的。
其实,我觉得,收费没毛病,一个功能好不容易研发出来,必须收费。
应用程序删除是需要收费
其实,这个功能收费,其实也是正常的。
收费,没毛病,比较一个功能好不容易研发出来,必须收费。
到底收费多少
这个时候,就有人问了,那你既然说了:“你很喜欢这个软件,而且觉得这个软件对特定功能收费也没问题,那你在吐槽什么呢?”
emmm
我也是这么觉得,我觉得,这样的专业的软件收费几十块钱,直接买断,完全ok。
比较功能做的还可以。
但是
当我打开这个软件的解锁图标,我惊呆了
这个软件一年要138!!
一年年费是138,B站一年年费也是差不多这个价格
但是这个软件也就是一个清除垃圾的功能
其实,这个软件确实不错,但是对于我来说,我用不到这些功能。
毕竟,在我这种非专业的人来说,清除垃圾,不太需要这样的、专业的软件。
对,主要是没钱嘛,舍不得花这个钱。
转折
可是,我当前的储存,也不太够了,也就剩下130多G了。怎么办呢?
那么多垃圾文件,放在那里,对于有强迫症的我来说,太难受了。
因此,我就在想,有什么办法,自己来删除呢?
手动删除
我这不是有手么,直接一个一个删除得了。
不行!
让我动手一个一个删,我感觉太低效率了。我希望能批量删除。而且能方便复用的。
python出场
对了,我想起来了,我是会python的啊
我为什么不用python删除呢?
因为我的大文件基本上都是集中在文档
和下载
两个文件夹中。
我只要对这两个文件夹中的每一个文件,都进行扫描,然后把那些比较大的文件都删除掉不就行了。
代码开发
我大概花了半小时的时间,就开发了这个小工具。
查看文件夹下所有的文件大小
主要是先写了一个函数,这个函数可以查询得到指定文件夹下面所有的文件路径和文件大小,并且返回一个名单,名单按照文件大小从大小到小进行降序。
import os
from pathlib import Path
import pandas as pd
# 这个是我需要扫描的文件夹路径,
# 可以替换成你自己的
global_dir = "/Users/huzheng/Downloads"
def cal_detail_in_dir(dir_name):
all_file_list = []
all_file_size = []
for (root, dir, file_name) in os.walk(dir_name):
for temp_file in file_name:
standard_path = f"{root}/{temp_file}"
if os.path.exists(standard_path):
all_file_size.append(os.stat(standard_path).st_size)
else:
all_file_size.append(None)
all_file_list.append(standard_path)
data = pd.DataFrame({'path': all_file_list, 'size': all_file_size})
data = data.pipe(
lambda x: x.sort_values(by=['size'], ascending=False)
).pipe(
lambda x: x.assign(**{
'size': x['size'].apply(lambda j: j/1024/1024)
})
).reset_index(drop=True)
return data
stat_df = cal_detail_in_dir(global_dir)
stat_df.head(20)
统计结果如下:
- 发现最大的一个文件,竟然是一个nlp图谱训练数据,大概是有400多MB。还是很大的。
- 第二大的文件,是一个神经网络模型文件,大概是在390MB左右。
- 以此类推,就不继续介绍了。
查看这个文件夹有多大
要想查看这个文件夹整体占系统多大内存,只要把这个文件夹下所有的文件大小都加在一起就行了。
那我们就把他们加起来试一试。
stat_df['size'].sum() /1000
#> 11.98000276184082
可以看出来,大概是12G左右。也就是说,前几个文件,都快站了整体的1/10了。这“马太效应”也太明显了吧。
批量删除大文件
既然,什么文件特别大,我们都了如指掌了,那就来删除他们。
我们这里设置一个规则:只要文件大于200MB的,就把它删除掉!
又写了一个小函数,这个函数只要传递一个文件的完整路径,就可以把他删除掉!
import shutil
from tqdm import tqdm
# 删除文件的函数
def remove_file(path):
try:
os.remove(path)
except OSError:
pass
# 文件大小大于200MB的,都删除掉!
big_file_path = stat_show.pipe(
lambda x: x.query('size > 200')
)['path'].tolist()
# 删除文件
_ = [remove_file(path=i) for i in tqdm(big_file_path)]
查看效果
上面的代码,运行完毕之后,会把文件夹中大于200MB的文件都删除掉,那大文件删除掉之后,整个文件夹大小是多少呢?
stat_show = cal_detail_in_dir(global_dir)
stat_show['size'].sum() / 1000
#> 10.158155868530274
这个文件夹,大小为10G左右,也就是删除了2G文件,算是不错了。
用到别的地方
上面的方法在下载
这个文件夹很好用,那么我用在文档
这个文件夹下,好用么?当然好用。
我这里就不再演示了。
反正,删除了大概100G的垃圾文件
最后
功能上
- 我这个代码,其实功能上还是非常简陋的。只是做了特定大小文件的检测和搜索。比较暴力。
- 但是其实,应该可以有白名单功能,这样,可以保护一下文件,让一些文件不删除。
- 目前只是用在macos系统上,window系统能用么?(其实可以用的)
- 是不是可以考虑这个功能:检测相同的文件。或者检查类似的文件。
- 是否可以添加清除垃圾程序的功能,是否可以清除缓存的功能等。
认识上
- 首先没有说,那个软件不好用,就是太贵了,对于我来说,使用起来太奢侈了。
- 本来也就是抱着试一试的态度做个小工具,可是没想到这么好用。我觉得大家都可以用上面的代码试一试。
- 最近其实很焦虑:害怕自己有没有阳?周围接二连三的都阳了,还是挺浮躁的。另外因为现在对python都太熟悉了,导致都快对python失去兴趣了。哈哈哈,还好这次终于找到用武之地了。
- 不写python,很难受!无处可用python,更难受!然而,使用python解决问题,可真的是太开心了!