源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Python删除指定目录下过期文件的2个脚本分享

  • 时间:2020-01-20 00:47 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Python删除指定目录下过期文件的2个脚本分享
[b]脚本1:[/b] 这两天用python写了一个删除指定目录下过期时间的脚本。也可能是我初学python,对python还不够熟习,总觉得这个脚本用shell写应该更简单也更容易些。 就功能上来说,该脚本已经实现了我想要的效果,不过该脚本还不够通用性,还有更多可以完善的地方。目前该脚本在python2.4下运行良好。同时,我在脚本中加入了对python版本的判断,理论上2.7下也应该可以正常使用。有环境的朋友可以帮忙测试一下。 该脚本不完善的地方在于,只能支持一级目录下的文件删除,还不支持目录递归。同时过期文件的定义只能按week来做。 [b]Python代码: [/b]
[u]复制代码[/u] 代码如下:
#! /usr/bin/env python # -*- coding=utf-8 -*- import sys import os import time,datetime # 定义需要删除文件的目录 dir = '/data/webbak/' # 被删除文件写入日志文件 logdir = '/var/log' logfile = os.path.join(logdir, 'delete.log') # 获取当前系统python版本 ver = sys.version ver = ver.split(' ') ver = ver[0] # 将"Wed Jul  4 13:25:59 2012"格式的时间转成“2012-07-02 14:50:15”格式的时间 # version是当前系统python版本号 # time是"Wed Jul  4 13:25:59 2012"格式的时间 # 函数返回"2012-07-02 14:50:15"格式的时间 def string2time(str_time, version = ver):  version_l = version.split('.')[0:2]  ver = version_l[0] + '.' + version_l[1]   if (ver == '2.7'):   f_time = datetime.datetime.strptime(str_time, time_format)   f_time = f_time.strftime('%Y-%m-%d %H:%M:%S')   return f_time  elif(ver == '2.4'):   f_time = time.strptime(str_time, time_format)   f_time = datetime.datetime(*f_time[0:6])   return f_time # 时间格式 time_format = "%a %b %d %H:%M:%S %Y" # 取得当前时间 today = datetime.datetime.now() # 定义4个星期 four_weeks = datetime.timedelta(weeks=6) # 4星期前的日期 four_weeks_ago = today - four_weeks # 将时间转成timestamps four_weeks_ago_timestamps = time.mktime(four_weeks_ago.timetuple()) # 列出目录中的所有文件 files = os.listdir(dir) # 打开要删除的文件日志 fh = open(logfile, "w+") # 遍历文件,打印出文件的创建时间 for f in files:  # 忽略掉.开头的文件  if f.startswith('.'):   continue  # 忽略掉当前目录下的目录  if os.path.isdir(os.path.join(dir,f)):   continue  # 获得文件的modify时间,并转换成timestamp格式  file_timestamp = os.path.getmtime(os.path.join(dir, f))  file_time_f = string2time(time.ctime(file_timestamp))  if float(file_timestamp) <= float(four_weeks_ago_timestamps):   fh.write(str(today) + "\t" + str(file_time_f) + "\t" + os.path.join(dir,f) + "\n")   os.remove(os.path.join(dir,f)) # 关闭文件 fh.close()
[b]脚本2: [/b]实现类似下面的Shell命令的操作
[u]复制代码[/u] 代码如下:
find  /data/log -ctime +5 | xargs  rm  -f
[b]Python代码: [/b]
[u]复制代码[/u] 代码如下:
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)
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部