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实现的文件同步服务器实例
Jun 02 Python
python 编程之twisted详解及简单实例
Jan 28 Python
Python判断文件或文件夹是否存在的三种方法
Jul 27 Python
python Matplotlib画图之调整字体大小的示例
Nov 20 Python
pandas数据分组和聚合操作方法
Apr 11 Python
对Python中plt的画图函数详解
Nov 07 Python
Python实现判断一个整数是否为回文数算法示例
Mar 02 Python
Python 使用 docopt 解析json参数文件过程讲解
Aug 13 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
Mar 10 Python
python导入库的具体方法
Jun 18 Python
python能做哪些生活有趣的事情
Sep 09 Python
java关于string最常出现的面试题整理
Jan 18 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上传文件,创建递归目录的实例代码
2013/10/18 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
2017/05/20 PHP
form自动提交实例讲解
2017/07/10 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
2018/04/20 PHP
安装docker和docker-compose实例详解
2019/07/30 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
JavaScript实现的使用键盘控制人物走动实例
2014/08/27 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
js 调用百度分享功能
2017/02/27 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
简述pm2常用命令集合及配置文件说明
2019/05/30 Javascript
JS实现水平遍历和嵌套递归操作示例
2019/08/15 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
pytorch: tensor类型的构建与相互转换实例
2018/07/26 Python
Python子类继承父类构造函数详解
2019/02/19 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
CSS Grid布局教程之浏览器开启CSS Grid Layout汇总
2014/12/30 HTML / CSS
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
英国门销售网站:Green Tree Doors
2020/01/07 全球购物
介绍一下except的用法和作用
2015/01/22 面试题
自我鉴定的范文
2013/10/03 职场文书
资料员岗位职责
2013/11/17 职场文书
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
大学生自我鉴定评语
2014/01/27 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书
Ajax常用封装库——Axios的使用
2021/05/08 Javascript
能让Python提速超40倍的神器Cython详解
2021/06/24 Python
Python实现GIF动图以及视频卡通化详解
2021/12/06 Python