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 05 Python
用python实现的去除win下文本文件头部BOM的代码
Feb 10 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
Python实现的弹球小游戏示例
Aug 01 Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
Python运行提示缺少模块问题解决方案
Apr 02 Python
Python实现一个简单的递归下降分析器
Aug 01 Python
Python绘图之二维图与三维图详解
Aug 04 Python
python3爬虫中多线程的优势总结
Nov 24 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
Dec 01 Python
Django框架中表单的用法
Jun 10 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/10/09 PHP
深入php中var_dump方法的使用详解
2013/06/24 PHP
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
laravel学习教程之存取器
2016/07/30 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
代码生成器 document.write()
2007/04/15 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
Jquery实现的简单轮播效果【附实例】
2016/04/19 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
原生 JS Ajax,GET和POST 请求实例代码
2016/06/08 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
jQuery Ajax前后端使用JSON进行交互示例
2017/03/17 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
JavaScript 常见的继承方式汇总
2020/09/17 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
python的unittest测试类代码实例
2017/12/07 Python
Python基于百度云文字识别API
2018/12/13 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
用python写爬虫简单吗
2020/07/28 Python
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
民族学专业求职信
2014/07/28 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
《惊弓之鸟》教学反思
2016/02/20 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
Pytorch DataLoader shuffle验证方式
2021/06/02 Python