python帮我省下了这笔冤枉钱

news2024/11/19 15:37:11

背景

今天不得不说一说我这个电脑的事情。我这个电脑是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解决问题,可真的是太开心了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106813.html

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

相关文章

【小学信息技术教资面试】《英文汉字巧切换》教案

题目:英文汉字巧切换内容: 基本要求: (1) 请在10分钟内完成试讲。 (2) 灵活切换汉字和英文字符。 (3) 试讲过程中涉及操作,进行演示即可。 《英文汉字巧切换…

如何准备考pmp?

我考的是旧考纲,5A 通过的,备考经验大家可以参考下,取长补短~ 一、复习计划的制定 根据之前在培训班共同奋斗的小伙伴学习时间统计,平均每天的学习时间是在 3-4 小时左右,基本上是白天 1 小时晚上 3 小时左右&#xf…

MySQL (二)------MySQL的使用、SQL的介绍

1.1 MySQL服务的启动 “我的电脑/计算机”-->右键-->“管理”-->“服务”-->启动和关闭MySQL服务 “开始菜单”-->“控制面板”-->“管理工具”-->“服务”-->启动和关闭MySQL “任务管理器”-->“服务”-->启动和关闭MySQL 或者 以管理员…

SQL练习题之求每个部门工资最高的人

冬至,又称日南至、冬节、亚岁。 文章目录前言一、题目二、表数据三、解答方法四、延伸思考题外话前言 分享自己做SQL练习时遇到的经典题目,供各位小伙伴参考。 一、题目 现有员工表employee,求每个部门工资最高的前五个员工的 id, name, de…

硬件系统工程师宝典(1)-----硬件系统设计应该从哪里开始?

系统设计举足轻重的一步,需求分析 今天我们开始读张志伟老师的《硬件系统工程师宝典》,这是一本非常好的入门书,对需求分析,电源、信号完整性,电源完整性,可制造性,原理图,pcb的详细…

风控特征变量如何命名

风控变量的命名相信是各位小伙伴,不管是策略还是模型开发的同学都会经常遇到的问题。如果变量不多,假设变量也就只有十几二十个左右,相信大家也不需要怎么处理,或许下面这样的简单命名方式就好了: 如VAR1~VARN&#x…

一套Abaqus常用子程序的二次开发和复杂应用攻略

当物体所受载荷是比较复杂的函数时(如与时间、位置等相关),通过界面输入的方式已经难以实现,通常便需要借助于DLOAD子程序来实现。下面将就ABAQUS软件的DLOAD子程序进行讲解和应用举例,希望通过此次讲解能够让更多的同…

01背包问题

01背包问题一、01背包问题1、问题描述2、问题性质分析3、动态规划思路(1)状态方程a.状态表示:b.状态转移:(2)循环的设计3、代码模板(1)朴素版(2)优化版一、01背包问题 1、问题描述 2、问题性质分析 这道题…

WEB接口测试之Jmeter接口测试自动化(初次接触)

软件测试自动化从不同的测试阶段分类,可从下层到上层依次分为单元测试-->接口测试-->界面自动化测试。 单元测试一般有开发人员自行完成,而界面自动化测试合适的测试条件又很难达到,测试人员在繁杂的手工界面测试之余, 更…

相信制造业品牌的实力:专访鸿雁全屋智能贵州总代理

作者 | 牧之 编辑 | 小沐 出品 | 智哪儿 zhinaer.cn长期以来,我们一直在讲智能家居市场的下沉,从一二线城市到三四线城市,从沿海到内陆。而事实上,印象中「欠发达」的内陆城市,对于智能家居的接受度可能比我们想象得要…

Qt中调用gRPC

RPC是Remote Procedure Call的简称,中文叫远程过程调用。 gRPC是由 google开发的一个高性能、通用的开源RPC框架,主要面向移动应用开发且基于HTTP/2协议标准而设计,同时支持大多数流行的编程语言。 一.编译gRPC 操作系统:window…

百亿级流量的系统架构该怎么设计,今天就来教会你!

V-xin:ruyuan0330 获得600页原创精品文章汇总PDF 目录 一、前情提示二、清晰划分系统边界三、引入消息中间件解耦四、利用消息中间件削峰填谷五、手动流量开关配合数据库运维六、支持多系统同时订阅数据七、系统解耦后的感受八、下集预告 一、前情提示 上一篇文章…

吊炸天的云原生,到底是个啥

云原生技术里有很多技术、概念和术语,不了解的人,往往弄不清楚而一头雾水,这些概念都是啥,之间是什么关系?本文要说的就是这些。本文更多是科普和扫盲,无意面面俱到,也无意深入细节。 本文适合一…

Allegro如何合并同名网络铜皮操作指导

Allegro如何合并同名网络铜皮操作指导 Allegro可以将同名网络的铜皮合并起来,如下图,需要把下面两块铜皮合并成一块铜皮 具体操作如下 选择Shape选择merge shapes

剑指Offer-面试题1:整数除法——你真的会用Math.abs吗?

整数除法 题目要求 输入2个int型整数,它们进行除法计算并返回商,要求不得使用乘号*、除号/及求余符号%。当发生溢出时,返回最大的整数值。假设除数不为0。例如,输入15和2,输出15/2的结果,即7。 有问题的…

使用OpenCV的函数polylines()绘制多条相连的线段和多边形;使用函数fillPoly()绘制带填充效果的多边形

函数polylines()可用来根据点集绘制多条相连的线段,也可用来绘制多边形。 函数polylines()有两种原型,这里只向大家介绍比较常用的那种原型。 函数polylines()的C原型如下: void cv::polylines(InputOutputArray img,const Point *const *…

Power BI 11个必学官方示例数据案例(附下载链接)

在开始学习Power BI时,最大的问题就是不知道哪里找数据,或者有数据却对搭建看板毫无头绪, 不知道该从哪里下手。 本文收集整理了官网上最值得学习的11个案例,包括不同行业和分析方法,方便大家按需学习。点击标题即可转…

安徽省建设工程监理人员从业水平能力证书

安徽省建设监理协会会员单位从业人员是指已通过安徽省建设监理协会组织的从业水平能力认定考试,取得《安徽省建设工程监理人员从业水平能力证书》,并在工程建设中从事监理工作的监理工程师和监理员(以下简称“监理工程师、监理员”&#xff0…

LLVM中矩阵Matrix的实现分析

1 背景说明 Clang提供了C/C语言对矩阵的扩展支持,以方便用户使用可变大小的二维数据类型来实现计算,目前该特性还是实验版,设计和实现都在变化中。LLVM目前设计为支持小型列矩阵(column major),其对矩阵的…

Java字节码介绍

Java字节码 概述 学习 Java 的都知道,我们所编写的 .java 代码文件通过编译将会生成 .class 文件,最初的方式就是通过 JDK 的 javac 指令来编译,再通过 java 命令执行 main 方法所在的类,从而执行我们的 Java 程序。而在这中间所…