Fork me on GitHub

太阳城申博官网登入大文件分割、命名脚本 - Python

日志文件分割、命名

本文来源:http://www.sss088.com/www_yxdown_com/

太阳城申博官网登入,研发及建造费用在30亿美元左右。德国联邦材料管理、采购和物流协会官网文章表示,中国的经济改革正逐步稳定,德国经济发展有赖于中国经济增长。金融危机的发生在历史上确实曾经掀起过轩然大波,不知有多少人因此倾家荡产,欲哭无泪,最后甚至自我了断。这关系实在让小编眼花缭乱,也希望“故事”主角们能有个说法,别总让群众们觉得“贵圈真乱”。

  据报道,黄教安指出,政府将在年底前新设青年希望财团管理和运营基金,并启动相关工作。方面,因欧洲央行决议和美联储决议前市场炒作题材较少,美债和美指回落走软,昨日终于突破17美元关口,最高达到至17.24美元附近。有些贫困家庭,哪怕彩礼再高,借钱也要娶,“一门亲事掏空一个家庭”的事情并不少见。他表示,如果不放交易制度,也可以放开转板,新三板具有很多上市资质的公司,尽管IPO改革推进推迟,但是建立新三板与沪深交易所之间的转板绿色通道仍然有空间。

目前市场普遍预计美联储在此次会议上。”  最终,欧洲央行把问题仍在政客们的脚边,警告称,如果他们突发奇想,屈服于民粹主义,那么欧洲央行的一切努力将付之东流。一连串的动作,有力呼应了规范旅游市场的现实需求。阿根廷专门研究亚洲问题的机构“亚洲观察”专家塞西莉亚·佩拉尔塔和纳迪娅·拉杜洛维奇近日在接受新华社记者采访时均表示,中国经济增长在全球范围都有着积极影响,尤其在拉美地区。

工作中经常会收到测试同学、客户同学提供的日志文件,其中不乏几百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的项目等:
太阳城申博官网登入/github_com/NemoHoHaloAi

posted @ 2019-09-28 22:02  太阳城申博官网登入HoLoong  阅读(...)  评论(...太阳城申博官网登入编辑  收藏
菲律宾申博游戏登入 www.tyc599.com 太阳城娱乐网址 菲律宾申博开户登入 www.66sbc.com 申博网上娱乐总公司
菲律宾太阳娱乐网址登入 菲律宾申博娱乐直营官网 188申博直属现金网登入 申博游戏登录官网 申博登录不了 申博代理开户登入
四川申博官网登入 申博在线娱乐登入 申博太阳城游戏下载 申博代理官网登入 www.687.net 申博太阳城直营网