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连接sql server乱码的解决方法
Jan 28 Python
Python读写Redis数据库操作示例
Mar 18 Python
python如何在终端里面显示一张图片
Aug 17 Python
Python时间戳使用和相互转换详解
Dec 11 Python
如何利用python查找电脑文件
Apr 27 Python
对django中render()与render_to_response()的区别详解
Oct 16 Python
Django重置migrations文件的方法步骤
May 01 Python
详解Python 切片语法
Jun 10 Python
python的几种矩阵相乘的公式详解
Jul 10 Python
使用Python调取任意数字资产钱包余额功能
Aug 15 Python
opencv设置采集视频分辨率方式
Dec 10 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
Apr 20 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
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
php中yii框架实例用法
2020/12/22 PHP
用js+xml自动生成表格的东西
2006/12/21 Javascript
根据分辩率调用不同的CSS.
2007/01/08 Javascript
简明json介绍
2008/09/28 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
jquery及原生js获取select下拉框选中的值示例
2013/10/25 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
JSONP基础知识详解
2017/03/19 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
Vue.js 利用v-for中的index值实现隔行变色
2018/08/01 Javascript
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
2018/10/24 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
Python之str操作方法(详解)
2017/06/19 Python
TensorFlow实现RNN循环神经网络
2018/02/28 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
2019/06/17 Python
Python3 字典dictionary入门基础附实例
2020/02/10 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
python调用摄像头的示例代码
2020/09/28 Python
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
怎么样写好简历中的自我评价
2013/10/25 职场文书
人事主管的岗位职责
2013/11/16 职场文书
洗发水广告词
2014/03/13 职场文书
副董事长岗位职责
2014/04/02 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
单位介绍信格式
2015/01/31 职场文书
单位车辆管理制度
2015/08/05 职场文书
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python
Python读写yaml文件
2022/03/20 Python