大きなファイルのセグメンテーション、命名スクリプト-Python

ログファイルのセグメンテーションとネーミング#

職場では、テスト学生やクライアント学生から提供されたログファイルを受け取ることがよくあります。その多くは数百MからGです。結局のところ、一晩のストレステストによって生成されるログの量は依然としてかなりの量であるxDxDなので、修正する必要があります。ログは分割されており、通常は問題をその時点で特定する必要があります。したがって、分割されたログファイルには、ファイル内のログの開始時点と終了時点を指定するのが最適です。これが最も直感的に使用できます。2つのスクリプトを共有しましょう。分割し、名前を付け、すべての人に少しの助けを提供したいと思っています。

大きなファイルのセグメンテーション##

使用法:

  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')!=-1else'/'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 inrange(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')withopen(_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+=1if count%100000==0:
			    print '処理済み:'+str(count)+'行'
		print '処理済み:'+str(count)+'行'
		os.system('python ./get_name_logfile.py '+dir_name)

ファイルは、開始行と終了行のタイムスタンプに従って名前が変更されます##

使用法:

パラメータとしてファイルまたはフォルダを選択できます。フォルダの場合は、フォルダ内の各ファイルを処理します(フォルダの下のフォルダ内のファイルには戻りません)。

コードは次のように表示されます。

	# -*- coding:utf-8-*-import os,re,shutil
	import sys
	import platform

	sys_name = platform.system().lower()
	SPLIT_CHAR ='\\'if sys_name.find('windows')!=-1else'/'

	_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 inrange(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-2618:20:42.093	r'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}'
	#	
	#	05-2618: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 inrange(len(names)):
		_name = names[i]print('name='+_name)
		#頭は10行で日付を見つけようとします
		head_len =10
		start_time ='(start_time-'
		_file_ =open(_name,'rb')
		reads = _file_.read()
		_file = reads.split('\n')iflen(_file)/2<10:
			head_len =len(_file)/2for j inrange(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 inrange(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)

Recommended Posts

大きなファイルのセグメンテーション、命名スクリプト-Python