用Python,3天实现文件系统自动“瘦身”!
点击上方“程序员大白”,选择“星标”公众号
重磅干货,第一时间送达

文章转载:Python编程


一、瘦身计划——自动删除久未访问的文件
Pythonimport timeimport os
> time_now = time.time()> time_threshold = time_now - 30 * 24 * 60 * 60
> path = "/Users/guest/Downloads"> files = os.listdir(path)
for file_name in files:file_pathname = os.path.join(path, file_name)if not os.path.isdir(file_pathname):access_time = os.stat(file_pathname).st_atimeif access_time < old_threshold:os.remove(file_name)print('Removed: ' + file_name)
二、一目了然—将文件按类型组织到对应子目录下
老文件清除了,要是文件依然很多,该怎么办呢?一种简单的策略,就是“分而治之”, 具体的功能很简单,给定一个打算整理的文件夹目录,这个脚本可以将该目录下的所有文件都揪出来,并且根据后缀名归类到不同的文件夹里,这简直是整理爱好者的福音。把不同类型的文件移到专门的文件夹里,比如把扩展名为“.mp4”和“.mkv”的文件移动到“movie”子目录,把扩展名为“.png”、“.jpg”的文件移动到“image”子目录,等等,以后再找文件就能快速定位了,目录看起来也清爽许多。
首先,还是把问题分解一下,要做的也是三件事:遍历文件夹下所有文件、根据文件扩展名判断文件类型、根据文件类型将文件移动到对应子目录(子目录不存在则需要创建子目录)。先在命令行打开Python交互界面:
Python文件遍历和路径操作仍要用到“os”模块,文件移动操作要用到“shutil”模块,先加载这两个模块:
import osimport shutil
设定要清理的目录,通过os.listdir()获取该目录下所有项目,保存到files:
> path = "/Users/guest/Download"> files = os.listdir(path)
遍历files,用os.path.isdir()检查每一项是文件还是目录:如果是目录,则直接忽略,如果是文件,则用.endswith()检查文件名后缀,据此判断文件类别img_class,如果类别检出成功,则用shutil.move()将该文件移动到类别对应的子目录下,如果该子目录不存在则用os.makedirs()创建目录:
for file_name in files:file_pathname = os.path.join(path, file_name)img_class = ''if not os.path.isdir(file_pathname):if file_name.endswith('.jpg') or file_name.endswith('.png'):img_class = 'image'elif file_name.endswith('.mp4') or file_name.endswith('.mkv'):img_class = 'movie'if img_class:target_path = os.path.join(path, img_class)if not os.path.isdir(target_path):os.makedirs(target_path)shutil.move(file_pathname, os.path.join(target_path, file_name))
运行完成,会看到各类文件已经被移动到对应子目录下。这里如果不对子目录是否存在进行判断就贸然移动文件,可能会触发目录不存在的异常。
三、解放双手——Python程序的自动调度
import timeimport osimport shutiltime_now= time.time()old_threshold = time_now - 30 * 24 * 60 * 60path = "/Users/guest/Download"files = os.listdir(path)for file_name in files:file_pathname = os.path.join(path, file_name)img_class = ''if not os.path.isdir(file_pathname):access_time = os.stat(file_pathname).st_atimeif access_time < old_threshold:os.remove(file_name)print(file_name + ' removed')else:if file_name.endswith('.jpg') or file_name.endswith('.png'):img_class = 'image'elif file_name.endswith('.mp4') or file_name.endswith('.mkv'):img_class = 'movie'if img_class:target_path = os.path.join(path, img_class)if not os.path.isdir(target_path):os.makedirs(target_path)shutil.move(file_pathname, os.path.join(target_path, file_name
crontab -e0 0 * * 0 python system_cleaner.py推荐阅读
关于程序员大白
程序员大白是一群哈工大,东北大学,西湖大学和上海交通大学的硕士博士运营维护的号,大家乐于分享高质量文章,喜欢总结知识,欢迎关注[程序员大白],大家一起学习进步!

