Python项目:定时删除文件

前言

惯例:声明:本文章仅供学习,个人经验之作,不承担任何责任。

这个疫情,人麻了,复工回来,身边的人走光了。

旧时代的残党

需求描述:

项目中存储了大量的图片文件,长期会占用磁盘空间。

定时删除文件,

定时删除文件夹下面的文件

定时删除给定目录下所有子文件但是不破坏文件目录。

定时删除多少天前的文件。

后台运行,且写个日志文件。

解决思路:

1.现在有文件的原因是因为视频流截帧之后,会做一个存的动作。方便把图片输入模型进行识别。这样做逻辑顺,容易排查错误,底图可以存下来,方便数据收集,排查错误等等。

2.截完帧的frame直接传给模型。

方法1:

使用python语言删除文件:os.remove(filename)

基础逻辑:

给定一个文件路径,遍历循环该路径下的所有子文件,

加一个判断日期,符合要求的文件remove掉。

lastmodifytime = os.stat(filename).st_mtime

判断是目录,则进去子目录,保持当前目录的结构不变

  elif os.path.isdir(filename):
            deletefile(filename)

关于定时这个问题,我没有解决,因为没有严格要求。

使用了time函数中自带的sleep函数

    while True:
        deletefile(path)
        time.sleep(86400)

那么是否可以设置为每天早上凌晨2点删除呢?

整体代码如下:

#!/bin/python
# coding:utf-8


import time
import os, sys

# 设置删除多少天前的文件
N = 3
# 要删除路径
path = r'/yourpath'


def deletefile(path):
    for eachfile in os.listdir(path):
        filename = os.path.join(path, eachfile)
        if os.path.isfile(filename):
            lastmodifytime = os.stat(filename).st_mtime
            # 设置删除多久之前的文件
            endfiletime = time.time() - 3600 * 24 * N
            if endfiletime > lastmodifytime:
                # if filename[-4:] == ".log":
                os.remove(filename)
                print("删除文件 %s 成功" % filename)
        # 如果是目录则递归调用当前函数
        elif os.path.isdir(filename):
            deletefile(filename)

def run_py(py_name,log_dir):
    cmd="nohup python -u {} >>{} 2>&1 &".format(py_name,log_dir)
    print(cmd)
    os.system(cmd)

if __name__ == '__main__':
    cmd = "nohup python -u yourpythoncode.py >>yourlogfilename 2>&1 &"
    while True:
        deletefile(path)
        time.sleep(86400)

说会话感觉这种方法有点呆,因为rm或者定时器都没有用,但是效果出奇的好。

后台执行则打这段代码:

nohup python -u yourpythoncode.py >>yourlogfilename 2>&1 &

OK啦,这段代码的效果是,每天检查一次,删除三天前的文件。

我试了试,确实好用,能解决问题。

但是有没有更好用的呢?

方法二:利用rm,linux指令

2022年6月9日补充

上次说到,方法一是为了解决问题,搞项目的懂的都懂。

然后俺寻思了一下。

import time,os,subprocess
from datetime import datetime


def run_cmd(cmd):
    child=subprocess.Popen(cmd,shell=True)
    child.wait()

def do_work():
    cmd_list=["rm -rf {}/*".format(yourpathname),#这里是一个文件夹
              "rm -rf {}".format(yourfilename1),#这里可以是一个log或者单个文件
              "rm -rf {}".format(yourfilename2)
              ]
    for cmd in cmd_list:
        run_cmd(cmd)

sleep_time=24*60*60
while True:
    now_time=datetime.now().strftime('%Y%m%d%H%M%S')
    print(now_time)
    #20220609083314
    if now_time[7]=='2':#定时删,比如某月的几号删,每天的几点删

        do_work()
        print("work! work!",now_time)
    else:
        print("keep sleep!",now_time)
    #time.sleep(sleep_time)

这次优化的好处是。

第一:我可以利用cmd,实现删某个文件夹下所有文件和某个文件。

第二:利用对datatime的检索,实现定时删。

好吧这也算。

OK,到这里我认为应该是完全够用了。

那么到后面可能会出现更优解或者更好的方法。

学海无涯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值