Python3开发 自动清理旧文件

1、需求背景

由于服务器存储资源有限,在经过长时间的存储数据后,常会出现硬盘占满,数据写入不进去,系统、服务均会出现异常。而很多数据不必要永久存储,超过一定失效后,即可删除清理,为新数据腾出空间。
网上找到的一些辅助清理工具要么收费,要么功能太简单,不能达到项目要求。

2、实现方式

考虑到通用性,选用python3 实现,可跨平台,Windows Linux 服务器均能使用

3、配置文件样式 config.json

json数组格式 灵活方便,可设置待清理的目录,及该目录下文件需要留存的天数,超过则自动删除;可根据需要制定多项不同的任务。

[
    {
        "dir":"D:\\Debug\\pic",
        "days":365
    }, 
    {
        "dir":"D:\\Debug\\tmp_pic",
        "days":100
    }, 
    {
        "dir":"D:\\Debug\\tmp_video",
        "days":100
    }    
]

4、Python3 实现

#!/usr/bin/python3
#coding=utf-8
import os, datetime,time, json

#判断目录是否为空
def dir_empty(dir_path):
    return not next(os.scandir(dir_path), None)

#删除指定文件夹下的旧文件
#_dir  指定目录
#_days 保留天数
def clear_old_files(_dir,_days):
    if(not os.path.exists(_dir)):
        print(F'''路径:{_dir},不存在,请检查配置文件!''')
        return
    else:
        print(F'''开始清理:{_dir}!''')
    ds = list(os.walk(_dir)) #获得所有文件夹的信息列表
    delta = datetime.timedelta(days=_days) #设定_days天前的文件为过期
    now = datetime.datetime.now() #获取当前时间
    for d in ds: #遍历该列表
        if(dir_empty(d[0])): #空目录,删除目录           
            print('删除空目录:')
            os.rmdir(d[0])
        else:
            print(F'''进入目录:{d[0]}''')
            os.chdir(d[0]) #进入本级路径,防止找不到文件而报错
            if d[2] != []: #如果该路径下有文件
                for x in d[2]: #遍历这些文件
                    #print(F'''检查文件:{x}''')
                    ctime = datetime.datetime.fromtimestamp(os.path.getctime(x)) #获取文件创建时间
                    #print(F'''创建日期:{ctime}''')
                    if ctime < (now-delta): #若创建于delta天前
                        os.remove(x) #则删掉
                        print(F'''文件已经过期:{x},删除!''')
                    else:
                        print(F'''文件尚未过期:{x},保留!''')
            else:
                print(F'''{d[0]}, 路径下没有文件!''')
        print(F'''路径:{d[0]},检查完毕!''')
        
#自我测试    
if __name__ == "__main__":    
    print(F'''读取配置文件:''')
    with open(os.path.join(os.getcwd(), 'config.json')) as f:
        configs=json.load(f)
    print(F'''遍历配置,清理文件:''')
    while True:
        for config in configs:
            print(F'''目录:{config['dir']},保留{config['days']}天''')
            try:
                clear_old_files(config['dir'], config['days'])
            except BaseException as e:
                print(e)
        time.sleep(5)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzl640

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值