复联 4 已经上映了,不知道小伙伴们都有没有买首映的电影票啊,随着复联的热度增加,各种各样的段子层出不清,我今天就在网上看到这么一个段子:
如果你觉得电脑空间不够用了,不妨试试 Thanos.sh(灭霸脚本),只需一行命令,它就会随机删除硬盘上的一半文件,
且无法恢复。如果你是乐于助人的灭霸本霸,建议在好友的电脑上使用,记得提前买好人身意外险哦。
看到这个段子以后很多人一笑而过,我却觉得很有现实意义啊,比如我们电脑里自己下不去手的某些学习资料文件夹,平时由于强迫症不知道删除哪些内容,就很适合用这种方式清理一下嘛。
于是我用 Python 实现了这个脚本,并打包成了 exe 程序分享给大家。(后台回复“灭霸“获取下载链接。)
程序使用起来也十分危险简单:
1、下载 exe 程序,移动到你需要清理的文件夹下(请不要放在盘符根目录!!!)。程序分两种,一是 Thanos.exe,直接彻底删除文件和文件夹,不可恢复!二是 Merciful_Thanos.exe,将文件或文件夹移至回收站,给你多一次考虑的机会。
2、运行程序,会提示你输入需要清理的文件夹路径,如果是清理程序所在的文件夹的话,可以直接回车确定。注意如果要自行输入路径的话,分隔符要用 \ 而非 / 。
3、为了避免误操作,程序会再次提示你确认,输入 y 或者 yes 后回车。
4、灭霸程序会随机删除文件夹下一半的文件/文件夹。
是不是十分的简单有效啊。
接下来是代码实现的部分。
其实我们的真正目的是为了实战 Python,那这个脚本中用到的知识主要是随机模块和文件操作。Python 有很多用于文件处理的内置模块和函数。这些函数来自很多不同的库,比如 os,os.path,shutil 和 pathlib,以后我们接触到了再详细介绍。
这次的代码逻辑十分简单,一共分为三步:
1、使用 os.listdir() 方法获取指定目录下的文件及文件夹列表;
2、使用 random.sample() 方法从文件列表中获取指定个数的子列表;
3、使用 os.remove()、shutil.rmtree() 及 send2trash.send2trash() 方法遍历删除列表中的文件,区别在于,os.remove()、shutil.rmtree() 会直接彻底删除文件,而send2trash.send2trash() 则是将文件移入回收站。
import os
import random
import shutil
def thanos(dir_path):
files = os.listdir(dir_path)
sample = random.sample(files, len(files) // 2)
for each in sample:
file_path = os.path.join(dir_path, each)
try:
if os.path.isfile(file_path):
os.remove(file_path)
elif os.path.isdir(file_path):
shutil.rmtree(file_path)
except PermissionError as e:
pass
if __name__ == '__main__':
print('=== 灭霸清理程序 V1.0 ===')
print('====== Author:不二小段 ======')
path = input('请输入你要清理的文件目录,如需清理当前目录,请直接按回车:')
if path == '':
path = os.getcwd()
flag = input('请输入y或yes确认操作:')
if flag == 'y' or 'yes':
print('===灭霸程序启动===')
thanos(path)
print('===灭霸程序已执行完毕===')
input('===请关闭程序===')
else:
input('===程序退出===')
如果想要制作慈悲版灭霸脚本(删除时放入回收站),则需要更改删除文件时用到的方法:
import send2trash
def thanos(dir_path):
files = os.listdir(dir_path)
sample = random.sample(files, len(files) // 2)
print(sample)
for each in sample:
file_path = os.path.join(dir_path, each)
try:
send2trash.send2trash(file_path)
except OSError as e:
pass