python帮我省下了这笔冤枉钱

背景

今天不得不说一说我这个电脑的事情。我这个电脑是2年前买的,屏幕非常大,是16寸的。
基本上没什么缺点,就是每隔一年,就要处理一下储存问题。

为什么呢,因为我的这台电脑的储存是512G的。所以不是太大。

但是今天早上,我发现:512G的内存,只剩下130多G了。算了算了,要那就清除一下垃圾吧。

然后就打开一个清理软件开始清理。

打开软件

这个软件,其实挺好用的。可以扫描文件,相关的功能比较优秀:

  1. 智能扫描:会统计相关的垃圾文件、大文件、重复文件、相似图片等。
  2. 下面几个选项,会把上面几个部分全部都展开,非常的详细。

而且还会显示电脑的相关细节:

  1. CPU使用情况
  2. 内存占用
  3. 垃圾文件
  4. 网络使用情况等

转折

你以为我是要推荐这个软件了么?

笑话

并不是

因为这个软件是收费的,很多地方不给钱,用不了。

重复文件删除需要收费

这个软件,删除相似的文件,竟然是收费的。

其实,我觉得,收费没毛病,一个功能好不容易研发出来,必须收费。

应用程序删除是需要收费

其实,这个功能收费,其实也是正常的。

收费,没毛病,比较一个功能好不容易研发出来,必须收费。

到底收费多少

这个时候,就有人问了,那你既然说了:“你很喜欢这个软件,而且觉得这个软件对特定功能收费也没问题,那你在吐槽什么呢?”

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)

统计结果如下:

  1. 发现最大的一个文件,竟然是一个nlp图谱训练数据,大概是有400多MB。还是很大的。
  2. 第二大的文件,是一个神经网络模型文件,大概是在390MB左右。
  3. 以此类推,就不继续介绍了。

查看这个文件夹有多大

要想查看这个文件夹整体占系统多大内存,只要把这个文件夹下所有的文件大小都加在一起就行了。
那我们就把他们加起来试一试。

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的垃圾文件

最后

功能上

  1. 我这个代码,其实功能上还是非常简陋的。只是做了特定大小文件的检测和搜索。比较暴力。
  2. 但是其实,应该可以有白名单功能,这样,可以保护一下文件,让一些文件不删除。
  3. 目前只是用在macos系统上,window系统能用么?(其实可以用的)
  4. 是不是可以考虑这个功能:检测相同的文件。或者检查类似的文件。
  5. 是否可以添加清除垃圾程序的功能,是否可以清除缓存的功能等。

认识上

  1. 首先没有说,那个软件不好用,就是太贵了,对于我来说,使用起来太奢侈了。
  2. 本来也就是抱着试一试的态度做个小工具,可是没想到这么好用。我觉得大家都可以用上面的代码试一试。
  3. 最近其实很焦虑:害怕自己有没有阳?周围接二连三的都阳了,还是挺浮躁的。另外因为现在对python都太熟悉了,导致都快对python失去兴趣了。哈哈哈,还好这次终于找到用武之地了。
  4. 不写python,很难受!无处可用python,更难受!然而,使用python解决问题,可真的是太开心了!

猜你喜欢

转载自blog.csdn.net/yuanzhoulvpi/article/details/128402200