一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Python 删除指定日期的文件方法总结

时间:2016-08-20 编辑:简简单单 来源:一聚教程网

python脚本执行shell,通过crontab执行python脚本

 代码如下 复制代码

#!/usr/bin/env python
#-*-coding:utf-8-*-

import os
import time
import datetime
import subprocess

today =datetime.date.today()
deltadays = datetime.timedelta(days=1)    #确定日期差额,如前天 days=2
yesterday = today - deltadays

month = yesterday.strftime('%b')
date = yesterday.strftime('%d')

command1 = "ls -hl /log1 | grep '%s %s' | awk '{print i$9}' i='/log1/' | xargs rm " % (month, date)
command11 = "ls -hl /log1 | grep '%s  %s' | awk '{print i$9}' i='/log1/' | xargs rm " % (month, date)
command2 = "ls -hl /log2 | grep '%s %s' | awk '{print i$9}' i='/log2/' | xargs rm " % (month, date)
command22 = "ls -hl /log2 | grep '%s  %s' | awk '{print i$9}' i='/log2/' | xargs rm " % (month, date)

os.system(command1)
os.system(command11)
os.system(command2)
os.system(command22)

注意

 代码如下 复制代码
ls -hl /log2 | grep '%s  %s' | awk '{print i$9}' i='/log2/' | xargs rm

这段shell命令最好是通过python执行shell答应看下具体的文件列出来的格式,防止无效

 代码如下 复制代码
print os.system("ls -hl /log2")

这样运行后就能得出结果。然后根据具体情况修改就好了。


例子2,删除日期的前一天 .

 代码如下 复制代码

import datetime
import time

def get_yestoday(mytime):
 myday = datetime.datetime( int(mytime[0:4]),int(mytime[4:6]),int(mytime[6:8]) )
 #now = datetime.datetime.now()
 delta = datetime.timedelta(days=-1)
 my_yestoday = myday + delta
 my_yes_time = my_yestoday.strftime('%Y%m%d')
 return my_yes_time

例子,删除文件夹内规定时间内的文件

 代码如下 复制代码

#-*-coding=gbk -*-
import os
import time

def listDir(fileDir):
     for eachFile in os.listdir(fileDir):
        if os.path.isfile(fileDir+"/"+eachFile):   #如果是文件,判断最后修改时间,符合条件进行删除
            ft = os.stat(fileDir+"/"+eachFile);
            ltime = int(ft.st_mtime); #获取文件最后修改时间
            #print "文件"+path+"/"+eachFile+"的最后修改时间为"+str(ltime);
            ntime = int(time.time())-3600*3; #获取现在时间减去3h
            if ltime<=ntime :        
                print "我要删除文件"+fileDir+"/"+eachFile;
                os.remove(fileDir+"/"+eachFile);   #删除3小时前的文件

        elif os.path.isdir(fileDir+"/"+eachFile) :    #如果是文件夹,继续递归
            listDir(fileDir+"/"+eachFile);
   
if __name__ == '__main__':
    path = "E:/offlinefiles";   #规定目录
    while True :    #持续
        time.sleep(600);   #减少资源利用率  600s秒一次
        print "3600s  wake up";
        listDir(path);

或者

 

 代码如下 复制代码

import os
import sys
import time
class DeleteLog:

    def __init__(self,fileName,days):
        self.fileName = fileName
        self.days = days
    def delete(self):
        if os.path.isfile(self.fileName):
            fd = open(self.fileName,'r')
            while 1:
                buffer = fd.readline()
                if not buffer : break
                if os.path.isfile(buffer):
                    os.remove(buffer)
            fd.close()
        elif os.path.isdir(self.fileName):
            for i in [os.sep.join([self.fileName,v]) for v in os.listdir(self.fileName)]:
                print i
                if os.path.isfile(i):
                    if self.compare_file_time(i):
                        os.remove(i)
                elif os.path.isdir(i):
                    self.fileName = i
                    self.delete()
    def compare_file_time(self,file):
        time_of_last_access = os.path.getatime(file)
        age_in_days = (time.time()-time_of_last_access)/(60*60*24)
        if age_in_days > self.days:
            return True
        return False
if __name__ == '__main__':
    if len(sys.argv) == 2:
        obj = DeleteLog(sys.argv[1],0)
        obj.delete()
    elif len(sys.argv) == 3:
        obj = DeleteLog(sys.argv[1],int(sys.argv[2]))
        obj.delete()
    else:
        print "usage: python %s listFileName|dirName [days]" % sys.argv[0]
        sys.exit(1)

热门栏目