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使用post提交数据到远程url的方法
Apr 29 Python
讲解Python中运算符使用时的优先级
May 14 Python
Ubuntu下创建虚拟独立的Python环境全过程
Feb 10 Python
不可错过的十本Python好书
Jul 06 Python
Pytorch反向求导更新网络参数的方法
Aug 17 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
Aug 27 Python
Python 面向对象部分知识点小结
Mar 09 Python
Python MOCK SERVER moco模拟接口测试过程解析
Apr 13 Python
解决python运行启动报错问题
Jun 01 Python
Python logging模块异步线程写日志实现过程解析
Jun 30 Python
Python图像处理二值化方法实例汇总
Jul 24 Python
python实现梯度下降算法的实例详解
Aug 17 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 批量更新网页内容实现代码
2010/01/05 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
2009/10/25 Javascript
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
浅析return false的正确使用
2013/11/04 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
bat和python批量重命名文件的实现代码
2016/05/19 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
python数据结构学习之实现线性表的顺序
2018/09/28 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
2018/12/24 Python
Python WEB应用部署的实现方法
2019/01/02 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
汽车驾驶求职信
2013/10/25 职场文书
董事长助理岗位职责
2014/02/18 职场文书
一年级评语大全
2014/04/23 职场文书
学生评语集锦
2015/01/04 职场文书
大学开学感言
2015/08/01 职场文书
Vue详细的入门笔记
2021/05/10 Vue.js
以下牛机,你有几个
2022/04/05 无线电