python 遍历删除日志
#! /usr/bin/python2.6
#-*- encoding:UTF-8 -*-
import os
import os.path
import time
root_dir = os.getcwd()
seperator = os.sep
max_used_space = 60*1024*1024*1024 #当使用的硬盘空间大于该值的时候启动删除60G
min_left_space = 20*1024*1024*1024 #删除保存的硬盘空间20G
max_remain_time = 7*24*60*60 #文件最大允许保存的时间为一周时间
file_list = []
def show_dirinfo(root_dir):
for parent, dirnames, filenames in os.walk(root_dir):
if len(filenames) > 0: #当前访问的文件夹下有文件存在
show_fileinfo(parent, filenames)
if len(dirnames) > 0: #当前访问的文件夹下还有子文件夹,递归访问
for dirname in dirnames:
if parent.endswith(seperator):
show_dirinfo(parent + dirname)
else:
show_dirinfo(parent + seperator + dirname)
del dirnames[0] #该文件夹已经访问过了,需要删除
if (len(filenames) == 0) and (len(dirnames) == 0): #空文件夹就删除
try:
os.rmdir(parent) ###############删除空文件夹#################
except Exception as e:
pass
def show_fileinfo(parent_dir, filenames):
for filename in filenames: #输出文件信息
full_path_name = os.path.join(parent_dir, filename)
try:
statinfo=os.stat(full_path_name)
except Exception as e:
return
file_size = statinfo.st_size
file_midifytime = statinfo.st_mtime
temp_dict = dict(zip(['filename', 'filesize', 'filetime'], [full_path_name, file_size, file_midifytime]))
#if file_size > 512*1024*1024:
save_file(temp_dict)
def save_file(temp_dict):
global file_list
insert_succ = 0 #判断是否插入成功
new_time = temp_dict['filetime']
if len(file_list) == 0:
file_list.append(temp_dict)
else:
for i in range(len(file_list)):
old_time = file_list[i]['filetime']
if new_time < old_time: #时间越久数值越小,按照时间排序,时间值越小也就是越久的文件排在最前面,删除的时候优先删除
file_list.insert(i, temp_dict)
insert_succ = 1
break
if insert_succ == 0: #没有插入成功表示当前的文件是新文件,需要放在最后面
file_list.append(temp_dict)
def delete_file():
global file_list
global max_used_space
global min_left_space
global max_remain_time
file_count = len(file_list)
file_index = 0
now_time = time.time()
while (file_index < (file_count - 1)):
file_midifytime = file_list[file_index]['filetime']
full_path_name = file_list[file_index]['filename']
if (now_time - file_midifytime) >= max_remain_time: #该文件的时间已经超过一周了,需要删除
try:
os.remove(full_path_name) #####################删除文件了#########################
del file_list[file_index]
file_count = file_count - 1
file_index = file_index - 1
except Exception as e:
return
file_index = file_index + 1
else:
break
total_file_size = get_total_file_size() #获得总的文件大小信息
if total_file_size > max_used_space: #如果大于上限就开始执行删除操作
while (total_file_size > min_left_space): #删除保留空间大小
delete_file_name = file_list[0]['filename'] #从头开始删除,因为已经排序了
delete_file_size = file_list[0]['filesize']
os.remove(delete_file_name) #执行删除操作
del file_list[0] #从文件列表中删除
total_file_size = total_file_size - delete_file_size #重新计算总的文件大小
def get_total_file_size(): #计算整个文件的大小
global file_list
total_size = 0.0
for i in range(len(file_list)):
total_size = total_size + file_list[i]['filesize']
try:
show_dirinfo(root_dir)
print(str(file_list))
#delete_file()
except Exception as e:
print(e)
python 遍历删除日志的更多相关文章
- python遍历删除列表的方法
for item in list(somelist): somelist.remove(item)
- python 遍历list并删除部分元素
python 遍历list并删除部分元素https://blog.csdn.net/afgasdg/article/details/82844403有两个list,list_1 为0-9,list_2 ...
- python 多线程删除MySQL表
一.需求分析 在<python 统计MySQL表信息>这篇博客中,链接如下: https://www.cnblogs.com/xiao987334176/p/9901692.html 已经 ...
- 用Python遍历目录
用Python遍历指定目录下的文件,一般有两种常用方法,但它们都是基于Python的os模块.下面两种方法基于Python2.7,主要用到的函数如下: 1.os.listdir(path):列出目录下 ...
- python遍历目录文件脚本的示例
例子 自己写的一个Python遍历文件脚本,对查到的文件进行特定的处理.没啥技术含量,但是也记录一下吧. 代码如下 复制代码 #!/usr/bin/python# -*- coding: utf-8 ...
- python之配置日志的三种方式
以下3种方式来配置logging: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数: 2)创建一个日志配置文件,然后使用fileCo ...
- Python之配置日志的几种方式(logging模块)
原文:https://blog.csdn.net/WZ18810463869/article/details/81147167 作为开发者,我们可以通过以下3种方式来配置logging: 1)使用Py ...
- 【转】python之配置日志的几种方式
[转]python之配置日志的几种方式 作为开发者,我们可以通过以下3种方式来配置logging: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用 ...
- Python中的日志处理
在日常项目中,总是需要记录下一些细小信息或者错误码.错误信息的,这个时候就需要进行日志的操作.python中用于日志创建.设置和记录等功能的模块,就是logging了,下面是对其基本使用方法的介绍: ...
随机推荐
- springMVC实现多文件上传
<h2>上传多个文件 实例</h2> <form action="/workreport/uploadMultiFile.html" method=& ...
- 【自动化测试】Selenium excel操作
http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html http://blog.csdn.net/five3/article/det ...
- T-SQL备忘(3):分组合并
--CREATE TABLE test(code varchar(50), [name] varchar(10),[count] int ) --INSERT test SELECT '001' , ...
- 大数据时代的技术hive:hive介绍
我最近研究了hive的相关技术,有点心得,这里和大家分享下. 首先我们要知道hive到底是做什么的.下面这几段文字很好的描述了hive的特性: 1.hive是基于Hadoop的一个数据仓库工具,可以将 ...
- OpenGL学习之路(三)
1 引子 这些天公司一次次的软件发布节点忙的博主不可开交,另外还有其它的一些事也占用了很多时间.现在坐在电脑前,在很安静的环境下,与大家分享自己的OpenGL学习笔记和理解心得,感到格外舒服.这让我回 ...
- MongoDB数据库和集合的状态信息
查看数据库统计信息:db.stats() > use testswitched to db test> db.stats(){ "db" : " ...
- 职业操盘手内部教材 z
重 点抢筹区: 是主力机构在低位拉高建仓后的一个相当尴尬的区域!因为在这个区域,场外的绝大多数投资者不敢买,而场内持有的人却很想卖!所以会出现成片的卖盘挂单! 由于主力向上做的意图已经非常明显,所 ...
- asp.net下ajax.ajaxMethod使用方法(转)
使用AjaxMethod可以在客户端异步调用服务端方法,简单地说就是在JS里调用后台.cs文件里的方法,做一些JS无法做到的操作,如查询数据库 使用AjaxMethod要满足一下几点: 1.如 ...
- 程序世界系列之-struts2安全漏洞引发的安全杂谈(上)
目录: 1.讨论关于struts 安全问题. 2.黑客文化. 3.如何降低安全漏洞的出现. 4.忠告建议. 题记: 这篇文章本来很早应该和大家见面的,中间由于个人原因调整了系列文章发布时间,实属罪过. ...
- 图Graph
存储结构: 1.邻接矩阵存储 typedef struct { char vex[MAXVEX];//顶点数 int arc[MAXVEX][MAXVEX];//邻接矩阵 int numVextexe ...