python 按照日期切分大日志文件(重点)和按照指定大小切分日志文件

#! /usr/bin/env python
# -*- coding:utf8 -*-
# 切分nginx 按照日期切分日志文件
from __future__ import division
import os,sys

big_file=‘/data/logs/media.net.error.log‘

# 按照文件大小拆分
def split_by_filesize(fromfile,todir,chunksize=0):
	"""
		chunksize: 字节建议每100M一个独立的文件
		f.read(int byte字节)
		100(M) = 100 * 1024 * 1024 (b) = 104857600 (b)
	"""
	# 创建切分文件后的临时目录
	if not os.path.exists(todir):
		os.mkdir(todir)
	else:
		for fname in os.listdir(todir):
			os.remove(os.path.join(todir,fname))
	# 按文件大小计算可切分的文件个数(100m一个)
	partnums = os.path.getsize(fromfile) / chunksize
	# 打开文件

	partnum = 0
	with open(fromfile,‘rb‘) as f:
		while True:
			chunk = f.read(chunksize) # 每次读取100m
			if not chunk:
				break
			filename = os.path.join(todir,big_file.split(‘/‘)[-1] + ‘_part_‘+str(partnum))
			with open(filename,‘wb‘) as f1:
				print "正在写入第" + str(partnum) + "个文件" + filename
				f1.write(chunk)
				print "第"+ str(partnum) + "个文件写入完成" + filename
			partnum += 1

# 按照日志日期分割
def split_by_date(srcfile,todir):
	"""
		从源文件srcfile中读取,确定日期,然后将其写入到分片文件中
	"""
	# 读取文件到内存中,利用generator 生成器
	with open(srcfile) as f:
		contents = f.readlines()
		c = [ line[0:10].strip() for line in contents ]
		date_l = sorted(set(c),key=c.index)
		for date in date_l:
			f_date = date.replace(‘/‘,‘_‘)
			filename = os.path.join(todir,srcfile.split(‘/‘)[-1] + ‘_‘+ f_date)
			print "正在写入文件" + filename
			with open(filename,‘wb‘) as f:
				for line in contents:
					d = line[0:10].strip()
					if d in line and d == date:
						f.write(line)

if __name__ == ‘__main__‘:
	# split_by_filesize(big_file,‘/test/‘,chunksize=100*1024*1024)
	split_by_date(big_file,‘/test/‘)
时间: 2024-12-29 11:53:10

python 按照日期切分大日志文件(重点)和按照指定大小切分日志文件的相关文章

tomcat 6.x + log4j日志配置并按天(或大小)生成文件

tomcat日志,默认路径在${catalina.home}/logs目录下,默认使用的是tomcat自己封装的logging工具类,默认配置文件使用的${catalina.home}/conf/logging.properties 默认的配置不满足按天或按大小将日志区分,用以备份或转移或删除,经常会出现日志文件超大,磁盘空间不够的情况(就算磁盘够,一段时间后的日志也应该及时清理和压缩起来). 考虑到这种需求,使用log4j的配置,将tomcat的logging拦截起来,配置如下: 采用log4

创建指定大小的空文件

1 BOOL CreateFileDemo(TCHAR* pFileName, DWORD dwSize) 2 { 3 HANDLE hFile; 4 HANDLE hMapFile; 5 6 hFile = CreateFile( 7 pFileName, 8 GENERIC_WRITE | GENERIC_READ, 9 FILE_SHARE_READ, 10 NULL, 11 CREATE_ALWAYS, 12 FILE_ATTRIBUTE_NORMAL, 13 NULL 14 ); 15

C# 读取大文件 (可以读取3GB大小的txt文件)

在处理大数据时,有可能 会碰到 超过3GB大小的文件,如果通过 记事本 或 NotePad++去打开它,会报错,读不到任何文件. 如果你只是希望读取这文件中的前几行,怎么办,下面的工具会帮您解决这个问题. 而且读取时间很快. 工具下载地址: http://pan.baidu.com/s/1y34wt      (15KB左右, 备注:要运行这个工具,需要您的机器已装过 .netFramework4.0 ) 源代码下载地址:http://pan.baidu.com/s/1jAyjl       

Java、Linux、Win 快速生成指定大小的空文件

Linux dd 命令: dd if=/dev/zero of=<fileName> bs=<一次复制的大小> count=<复制的次数> 生成 50 MB 的空文件: dd if=/dev/zero of=50M-1.txt bs=1M count=50 Windows fsutil 命令: fsutil file createnew <fileName> <文件大小单位字节> 生成 10MB 的空文件: fsutil file createn

用Python和FFmpeg查找大码率的视频文件

用Python和FFmpeg查找大码率的视频文件 本文使用Python2.7, 这个工作分两步 遍历文件夹下的视频文件 用ffprobe获取是视频文件的码率信息 用ffprobe 获取json格式的视频信息 用ffprobe.exe是FFmpeg自带的查看视频信息的工具,其获取json格式的信息命令如下 ffprobe -v quiet -print_format json -show_format -show_streams -i filename 这个命令会输出 带有 streams和for

log4j的日志文件保存到项目发布目录,log4j文件每天分割按日期命名

自己设置目录,也就是在项目启动时通过System.setProperty来设置,实现ServletContextListener来解决: public class log4jlistener implements ServletContextListener { public static final String log4jdirkey = "log4jdir"; public void contextDestroyed(ServletContextEvent servletcont

Python之日期与时间处理模块(date和datetime)

本节内容 前言 相关术语的解释 时间的表现形式 time模块 datetime模块 时间格式码 总结 前言 在开发工作中,我们经常需要用到日期与时间,如: 作为日志信息的内容输出 计算某个功能的执行时间 用日期命名一个日志文件的名称 记录或展示某文章的发布或修改时间 其他 Python中提供了多个用于对日期和时间进行操作的内置模块:time模块.datetime模块和calendar模块.其中time模块是通过调用C库实现的,所以有些方法在某些平台上可能无法调用,但是其提供的大部分接口与C标准库

[转载]python文件和目录操作方法大全(含更改文件夹下所有文件名称的实例)

http://blog.csdn.net/u010159842/article/details/53084067 一.Python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法.1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()2.返回指定目录下的所有文件和目录名:os.listdir()3.函数用来删除一个文件:os.remove()4.删除多个目录:os.removedirs(r"c:\python")5.检验给出的路径是否是一

Python、编译解释、动态库静态库、编译过程、头文件了解一下

学习Python这门语言首先要了解 什么是编译与解释,什么是连接,什么是动态库与静态库, 什么是编译: 编译就是先把高级语言设计的程序翻译成二进制的机器语言,然后CPU直接执行机器码就可以了.一把翻译再执行 编译型语言在于速度快. 什么是解释: 解释就是在程序运行时,才把高级程序语言一条一条地翻译成二进制的机器语言.边运行边翻译成二进制机器语言.所以速度没有编译来得快.边执行边翻译 解释型语言的优点在于可以跨平台. Python语言的优点: 可移植性.可扩展性.可嵌入性 简单.优雅.明确 开发效