用Python,3天实现文件系统自动“瘦身”!
点击上方“程序员大白”,选择“星标”公众号
重磅干货,第一时间送达
文章转载:Python编程
一、瘦身计划——自动删除久未访问的文件
Python
import time
import os
> time_now = time.time()
30 * 24 * 60 * 60 > time_threshold = time_now -
"/Users/guest/Downloads" > path =
> 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_atime
if access_time < old_threshold:
os.remove(file_name)
'Removed: ' + file_name) print(
二、一目了然—将文件按类型组织到对应子目录下
老文件清除了,要是文件依然很多,该怎么办呢?一种简单的策略,就是“分而治之”, 具体的功能很简单,给定一个打算整理的文件夹目录,这个脚本可以将该目录下的所有文件都揪出来,并且根据后缀名归类到不同的文件夹里,这简直是整理爱好者的福音。把不同类型的文件移到专门的文件夹里,比如把扩展名为“.mp4”和“.mkv”的文件移动到“movie”子目录,把扩展名为“.png”、“.jpg”的文件移动到“image”子目录,等等,以后再找文件就能快速定位了,目录看起来也清爽许多。
首先,还是把问题分解一下,要做的也是三件事:遍历文件夹下所有文件、根据文件扩展名判断文件类型、根据文件类型将文件移动到对应子目录(子目录不存在则需要创建子目录)。先在命令行打开Python交互界面:
Python
文件遍历和路径操作仍要用到“os”模块,文件移动操作要用到“shutil”模块,先加载这两个模块:
import os
import shutil
设定要清理的目录,通过os.listdir()获取该目录下所有项目,保存到files:
"/Users/guest/Download" > path =
> 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'):
'image' img_class =
elif file_name.endswith('.mp4') or file_name.endswith('.mkv'):
'movie' img_class =
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 time
import os
import shutil
time_now= time.time()
old_threshold = time_now - 30 * 24 * 60 * 60
path = "/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_atime
if 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 -e
0 0 * * 0 python system_cleaner.py
推荐阅读
关于程序员大白
程序员大白是一群哈工大,东北大学,西湖大学和上海交通大学的硕士博士运营维护的号,大家乐于分享高质量文章,喜欢总结知识,欢迎关注[程序员大白],大家一起学习进步!