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的源码浅要剖析Python的内存管理
Apr 16 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
Jul 06 Python
初学python的操作难点总结(新手必看篇)
Aug 03 Python
Python实现的破解字符串找茬游戏算法示例
Sep 25 Python
将字典转换为DataFrame并进行频次统计的方法
Apr 08 Python
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
python随机在一张图像上截取任意大小图片的方法
Jan 24 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
python语言中有算法吗
Jun 16 Python
Python Opencv实现单目标检测的示例代码
Sep 08 Python
python调用百度AI接口实现人流量统计
Feb 03 Python
Python中rapidjson参数校验实现
Jul 25 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伪静态页面函数附使用方法
2008/06/20 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
Yii2框架中日志的使用方法分析
2017/05/22 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
从零开始学习jQuery (八) 插播:jQuery实施方案
2011/02/23 Javascript
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
[05:10]2014DOTA2国际邀请赛 通往胜利之匙赛场探秘之旅
2014/07/18 DOTA
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
python多线程与多进程及其区别详解
2019/08/08 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
机电工程专业应届生求职信
2013/10/03 职场文书
应届生保险求职信
2013/11/11 职场文书
测绘工程个人的自我评价
2013/11/23 职场文书
运动会广播稿300字
2014/01/10 职场文书
网上开店必备创业计划书
2014/01/26 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
股权转让协议书
2014/04/12 职场文书
五年级学生评语
2014/04/22 职场文书
《我爱祖国》演讲稿1000字
2014/09/26 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
闪闪红星观后感
2015/06/08 职场文书
申论不会写怎么办?教您掌握这6点思维和原则
2019/07/17 职场文书
导游词之杭州西湖
2019/09/19 职场文书