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


Posted in Python onApril 10, 2014

脚本1:

这两天用python写了一个删除指定目录下过期时间的脚本。也可能是我初学python,对python还不够熟习,总觉得这个脚本用shell写应该更简单也更容易些。
就功能上来说,该脚本已经实现了我想要的效果,不过该脚本还不够通用性,还有更多可以完善的地方。目前该脚本在python2.4下运行良好。同时,我在脚本中加入了对python版本的判断,理论上2.7下也应该可以正常使用。有环境的朋友可以帮忙测试一下。
该脚本不完善的地方在于,只能支持一级目录下的文件删除,还不支持目录递归。同时过期文件的定义只能按week来做。

Python代码:

#! /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()

脚本2:
实现类似下面的Shell命令的操作

find  /data/log -ctime +5 | xargs  rm  -f

Python代码:
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)
Python 相关文章推荐
Python3.x和Python2.x的区别介绍
Feb 12 Python
python切换hosts文件代码示例
Dec 31 Python
跟老齐学Python之让人欢喜让人忧的迭代
Oct 02 Python
Python装饰器使用示例及实际应用例子
Mar 06 Python
python正则实现提取电话功能
Feb 24 Python
django DRF图片路径问题的解决方法
Sep 10 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
python pytest进阶之fixture详解
Jun 27 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
May 15 Python
Python常用类型转换实现代码实例
Jul 28 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
Nov 24 Python
python unichr函数知识点总结
Dec 16 Python
python实现随机密码字典生成器示例
Apr 09 #Python
Python下的Mysql模块MySQLdb安装详解
Apr 09 #Python
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
Apr 08 #Python
python计算圆周长、面积、球体体积并画出圆
Apr 08 #Python
python实现类似ftp传输文件的网络程序示例
Apr 08 #Python
Python collections模块实例讲解
Apr 07 #Python
python操作xml文件示例
Apr 07 #Python
You might like
谈谈新手如何学习PHP
2006/12/14 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
服务器变量 $_SERVER 的深入解析
2013/07/02 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
两款万能的php分页类
2015/11/12 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
js 验证身份证信息有效性
2014/03/28 Javascript
javascript实现随时变化着的背景颜色
2015/04/02 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
24行JavaScript代码实现Redux的方法实例
2019/11/17 Javascript
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
python中dict使用方法详解
2019/07/17 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
Python底层封装实现方法详解
2020/01/22 Python
Python基于requests实现模拟上传文件
2020/04/21 Python
Django3中的自定义用户模型实例详解
2020/08/23 Python
python 爬取百度文库并下载(免费文章限定)
2020/12/04 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
迎新晚会邀请函
2014/02/01 职场文书
广告业务员岗位职责
2014/02/06 职场文书
《临死前的严监生》教学反思
2014/02/13 职场文书
竞争上岗实施方案
2014/03/21 职场文书
基层党建工作汇报材料
2014/08/15 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
演讲开场白和结束语
2015/05/29 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
初中语文教学反思范文
2016/03/03 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python