日志文件分割、命名

工作中经常会收到测试同学、客户同学提供的日志文件,其中不乏几百M一G的也都有,毕竟压测一晚上产生的日志量还是很可观的,xDxD,因此不可避免的需要对日志进行分割,通常定位问题需要针对时间点,因此最好对分割后的日志文件使用文件中日志的开始、结束时间点来命名,这样使用起来最为直观,下面给大家分享两个脚本,分别作分割、命名,希望能够给大家提供一点点帮助;

大文件分割

用法:

  1. python split_big_file.py
  2. 输入文件全路径名
  3. 输入期望的分割后每个小文件的行数
  4. Just wait.

代码如下:

	# -*- coding:utf-8 -*-

	import os,re,shutil
import platform sys_name = platform.system().lower()
SPLIT_CHAR = '\\' if sys_name.find('windows') != -1 else '/' print('input big files`s path:')
_path = raw_input()
names = []
pathes = []
if os.path.isfile(_path):
print('is file')
names.append(_path)
else:
print('is nothing')
'''
elif os.path.isdir(_path):
print('This is dir')
pathes = os.listdir(_path)
print('pathes='+str(pathes))
for i in range(len(pathes)):
fullpath = _path+SPLIT_CHAR+pathes[i]
print('fullpath='+fullpath)
if os.path.isfile(fullpath):
names.append(fullpath)
files.append(open(fullpath).read().split('\n'))
''' print(len(names)) line_num = int(raw_input('every file`line num = '))
print('line number='+str(line_num)) for i in range(len(names)):
_name = names[i]
ori_name = _name.split(SPLIT_CHAR)[len(_name.split(SPLIT_CHAR))-1]
dir_name = _name.replace(ori_name,'DIR_'+ori_name)
dir_name = dir_name.replace('.','_')
print ori_name
print dir_name
os.system('mkdir '+dir_name)
count = 1
print '已处理:'+str(count)+'行'
part_file = open(dir_name+SPLIT_CHAR+str(0)+'.part.txt','w')
with open(_name, 'rb') as f:
for line in f:
if count%line_num == 0:
part_file.close()
part_file = open(dir_name+SPLIT_CHAR+str(int(count/line_num))+'.part.txt','w')
part_file.write(line+'\n')
count+=1
if count%100000 == 0:
print '已处理:'+str(count)+'行'
print '已处理:'+str(count)+'行'
os.system('python ./get_name_logfile.py '+dir_name)

文件按照开始、结束行时间戳重命名

用法:

  • python get_name_logfile.py log.txt
  • python get_name_logfile.py logs

参数选择文件或者文件夹均可,如果是文件夹,则会针对文件夹中的每个文件做处理(不会递归到文件夹下文件夹中的文件哦);

代码如下:

	# -*- coding:utf-8 -*-

	import os,re,shutil
import sys
import platform sys_name = platform.system().lower()
SPLIT_CHAR = '\\' if sys_name.find('windows') != -1 else '/' _path = sys.argv[1]
names = []
files = []
pathes = []
if os.path.isfile(_path):
print('is file')
names[0] = _path
elif os.path.isdir(_path):
print('This is dir')
pathes = os.listdir(_path)
print('pathes='+str(pathes))
for i in range(len(pathes)):
fullpath = _path+SPLIT_CHAR+pathes[i]
print('fullpath='+fullpath)
if os.path.isfile(fullpath):
names.append(fullpath)
else:
print('is nothing') print(len(names)) # 日期格式 : 05-26 18:20:42.093 r'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}'
#
# 05-26 18:20:43.093:r'\d{2}-\d{2} {1,}\d{2}:\d{2}:\d{2}.\d{1,10}' date_reg = r'\d{2}-\d{2} {1,}\d{2}:\d{2}:\d{2}.\d{1,10}'
time_reg = r'\d{2}:\d{2}:\d{2}.\d{1,10}' for i in range(len(names)):
_name = names[i]
print('name='+_name)
# head 尝试在10行内查找日期
head_len = 10
start_time = '(start_time-'
_file_ = open(_name, 'rb')
reads = _file_.read()
_file = reads.split('\n')
if len(_file)/2 < 10:
head_len = len(_file)/2
for j in range(head_len):
res = re.search(date_reg, _file[j])
if res!=None and res.group(0)!=None:
start_time = res.group(0)
print('start_time='+start_time)
break
# tail
tail_len = len(_file)-head_len
end_time = '-end_time)'
for j in range(len(_file)-1,tail_len-1,-1):
res = re.search(time_reg, _file[j])
if res!=None and res.group(0)!=None:
end_time = res.group(0)
print('end_time='+end_time)
break
_file_.close()
ori_name = _name.split(SPLIT_CHAR)[len(_name.split(SPLIT_CHAR))-1]
print('ori_name='+ori_name)
new_name = start_time.replace(':','-')+'__'+end_time.replace(':','-')+os.path.splitext(ori_name)[1]
print('new_name='+new_name)
print("copy %s %s" % (_name, _name.replace(ori_name,new_name)))
#os.system ("copy %s %s" % (_name, _name.replace(ori_name,new_name)))
shutil.copy(_name,_name.replace(ori_name,new_name))
os.system ("rm -rf "+_name)

最后

大家可以到我的Github上看看有没有其他需要的东西,目前主要是自己做的机器学习项目、Python各种脚本工具、数据分析挖掘项目以及Follow的大佬、Fork的项目等:

https://github.com/NemoHoHaloAi

大文件分割、命令脚本 - Python的更多相关文章

  1. Linux大文件分割splite

    /********************************************************************** * Linux大文件分割splite * 说明: * 编 ...

  2. Linux中split大文件分割和cat合并文件

    当需要将较大的数据上传到服务器,或从服务器下载较大的日志文件时,往往会因为网络或其它原因而导致传输中断而不得不重新传输.这种情况下,可以先将大文件分割成小文件后分批传输,传完后再合并文件. 1.分割 ...

  3. c#大文件分割过程

    需求: 在项目开发中,我们会遇到单个文件大小超过1TB的文件,这样的文件只能进行单文件读取,往往会造成读取完成耗时过长,导致客户在使用体验过程中不满意. 为了解决提升大文件的解析速度,我想到了先分割大 ...

  4. android下大文件分割上传

    由于android自身的原因,对大文件(如影视频文件)的操作很容易造成OOM,即:Dalvik堆内存溢出,利用文件分割将大文件分割为小文件可以解决问题. 文件分割后分多次请求服务. //文件分割上传 ...

  5. PHP + JS 实现大文件分割上传

    服务器上传文件会有一定的限制.避免内存消耗过大影响性能,在 php.ini 配置文件中,有几个影响参数: upload_max_filesize = 2M //PHP最大能接受的文件大小 post_m ...

  6. Html5 突破微信限制实现大文件分割上传

    先来前端代码 <!DOCTYPE html> <html> <head> <meta name="viewport" content=&q ...

  7. c# 大文件分割 复制 Filestream 进度条

    大文件分割复制,每次复制100M 也可以复制别的较大数值. 小于1G的小文件就直接复制得了.代码里没写 ,但是很简单 直接写进去就好了,难得是分割复制 所以没写. 好吧 我还是改了 改成小文件也可以复 ...

  8. FileStrem大文件分割复制

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. formdata方式上传文件,支持大文件分割上传

    1.upload.html <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/html"> <h ...

随机推荐

  1. Django之使用中间件解决前后端同源策略问题

    问题描述 前端时间在公司的时候,要使用angular开发一个网站,因为angular很适合前后端分离,所以就做了一个简单的图书管理系统来模拟前后端分离. 但是在开发过程中遇见了同源策略的跨域问题,页面 ...

  2. Unity Shader 卡通渲染 基于退化四边形的实时描边

    从csdn转移过来,顺便把写过的文章改写一下转过来. 一.边缘检测算法 3D模型描边有两种方式,一种是基于图像,即在所有3D模型渲染完成一张图片后,对这张图片进行边缘检测,最后得出描边效果.一种是基于 ...

  3. HTML 参考手册(摘自菜鸟教程)

    标签 描述 基础   <!DOCTYPE>  定义文档类型. <html> 定义一个 HTML 文档 <title> 为文档定义一个标题 <body> ...

  4. stage_ros的world文件配置方法

    官方文档参阅:http://rtv.github.io/Stage/modules.html stage_ros是一个基于stage的2D模拟器,用于ROS的仿真测试.虽然现在越来越多的人在使用gaz ...

  5. 爬虫——网页解析利器--re & xpath

    正则解析模块re re模块使用流程 方法一 r_list=re.findall('正则表达式',html,re.S) 方法二  创建正则编译对象 pattern = re.compile('正则表达式 ...

  6. HDU4348To the moon主席树,区间修改

    题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q l r:查询当前时间戳区间[l,r]中所有数的和 . (3)H l r ...

  7. hdu 5037 Frog(贪心)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5037 题解:为了让放的石头有意义肯定是没l+1的距离放2个也就是说假设现在位置为pos那么 ...

  8. 基于WFST的语音识别解码器

    学习语音识别有些时间了.老板要求我们基于Kaldi搭一个语音识别系统,在设备上通过MIC讲话,连着设备的PC的console上就能基本实时显示出讲话的内容.由于我们都是小白,刚开始可以要求低些,就用传 ...

  9. 【Redis】基本数据类型

    一.概述 二.String(字符串) 三.List(列表) 四.Hash(字典) 五.Set(集合) 六.Sorted Set(有序集合) 一.概述 Redis目前支持5种数据类型,分别是: Stri ...

  10. 【Offer】[61] 【扑克牌中的顺子】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2~10 为数字本身,A为1, J为11, Q为12,K为13,而大 ...