大文件分割、命名脚本 - Python
时间:2022-07-25
本文章向大家介绍大文件分割、命名脚本 - Python,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
日志文件分割、命名
工作中经常会收到测试同学、客户同学提供的日志文件,其中不乏几百M一G的也都有,毕竟压测一晚上产生的日志量还是很可观的,xDxD,因此不可避免的需要对日志进行分割,通常定位问题需要针对时间点,因此最好对分割后的日志文件使用文件中日志的开始、结束时间点来命名,这样使用起来最为直观,下面给大家分享两个脚本,分别作分割、命名,希望能够给大家提供一点点帮助;
大文件分割
用法:
- python split_big_file.py
- 输入文件全路径名
- 输入期望的分割后每个小文件的行数
- 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}Td{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)
- 浅谈PHP 5中垃圾回收算法的演化
- POJ 2484 A Funny Game(智商博弈)
- php pathinfo()的用法
- BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)
- 微信公众平台开发
- BZOJ 1115: [POI2009]石子游戏Kam (阶梯nim)
- php性能监测模块XHProf
- BZOJ 1022: [SHOI2008]小约翰的游戏John (Anti-nim)
- 洛谷P2252 取石子游戏(威佐夫博弈)
- HDU 3032 Nim or not Nim?(Multi-Nim)
- POJ 2311 Cutting Game(二维SG+Multi-Nim)
- js去掉html标签和去掉字符串文本的所有的空格
- php操作memcache的使用测试总结
- linux awk命令详解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- redis妙用-hash类型
- redis妙用-list类型
- redis妙用-set类型
- JVM调优实战:解决CMS concurrent-abortable-preclean LongGC的问题
- redis妙用-zset类型
- 【线上排查实战】AOP切面执行顺序你真的了解吗
- 使用markdown,knitr和pandoc在R语言中编写可重现的报告
- R语言广义线性模型(GLMs)算法和零膨胀模型分析
- R语言中广义线性模型(GLM)中的分布和连接函数分析
- R语言自适应平滑样条回归分析
- R语言区间数据回归分析
- R语言ggsurvplot绘制生存曲线报错 : object of type ‘symbol‘ is not subsettable
- R软件SIR模型网络结构扩散过程模拟
- R语言中使用线性模型、回归决策树自动组合特征因子水平
- R语言缺失值的处理:线性回归模型插补