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 相关文章推荐
python中xrange用法分析
Apr 15 Python
python比较两个列表大小的方法
Jul 11 Python
python编程开发之类型转换convert实例分析
Nov 13 Python
python利用正则表达式提取字符串
Dec 08 Python
Python实现连接postgresql数据库的方法分析
Dec 27 Python
用python简单实现mysql数据同步到ElasticSearch的教程
May 30 Python
python range()函数取反序遍历sequence的方法
Jun 25 Python
搭建python django虚拟环境完整步骤详解
Jul 08 Python
Python编写带选项的命令行程序方法
Aug 13 Python
在spyder IPython console中,运行代码加入参数的实例
Apr 20 Python
Django多层嵌套ManyToMany字段ORM操作详解
May 19 Python
详解python polyscope库的安装和例程
Nov 13 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各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
PHP开发中常用的十个代码样例
2016/02/02 PHP
PHP中“=&gt;
2019/03/01 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
JQuery 国际象棋棋盘 实现代码
2009/06/26 Javascript
jQuery 使用手册(四)
2009/09/23 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
js检查页面上有无重复id的实现代码
2013/07/17 Javascript
javascript用函数实现对象的方法
2015/05/14 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
jquery获取所有选中的checkbox实现代码
2016/05/26 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
JavaScript数组_动力节点Java学院整理
2017/06/26 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
Vue中使用webpack别名的方法实例详解
2018/06/19 Javascript
JS常见构造模式实例对比分析
2018/08/27 Javascript
angular中如何绑定iframe中src的方法
2019/02/01 Javascript
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
Vue 自适应高度表格的实现方法
2020/05/13 Javascript
跟老齐学Python之有点简约的元组
2014/09/24 Python
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
Python中pip更新和三方插件安装说明
2018/07/08 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
大学校庆策划书
2014/01/31 职场文书
医学专业应届生的自我评价
2014/02/28 职场文书
新文化运动的基本口号
2014/06/21 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
付款承诺函范文
2015/01/21 职场文书
上诉答辩状范文
2015/05/22 职场文书
MySQL详细讲解变量variables的用法
2022/06/21 MySQL
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android