工作中經常會收到測試同學、客戶同學提供的日志文件,其中不乏幾百M一G的也都有,畢竟壓測一晚上產生的日志量還是很可觀的,xDxD,因此" />

基于Python實現大文件分割和命名腳本過程解析

 更新時間:2019-09-29 10:00:56   作者:佚名   我要評論(0)

日志文件分割、命名


工作中經常會收到測試同學、客戶同學提供的日志文件,其中不乏幾百M一G的也都有,畢竟壓測一晚上產生的日志量還是很可觀的,xDxD,因此

日志文件分割、命名

工作中經常會收到測試同學、客戶同學提供的日志文件,其中不乏幾百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}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)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

  • python實現按行分割文件
  • Python中使用pypdf2合并、分割、加密pdf文件的代碼詳解
  • Python分割指定頁數的pdf文件方法
  • Python 逐行分割大txt文件的方法
  • python分割文件的常用方法
  • 重命名批處理python腳本
  • Python獲取運行目錄與當前腳本目錄的方法

相關文章

  • 基于Python實現大文件分割和命名腳本過程解析

    基于Python實現大文件分割和命名腳本過程解析

    日志文件分割、命名 工作中經常會收到測試同學、客戶同學提供的日志文件,其中不乏幾百M一G的也都有,畢竟壓測一晚上產生的日志量還是很可觀的,xDxD,因此
    2019-09-29
  • Django REST Framework之頻率限制的使用

    Django REST Framework之頻率限制的使用

    開放平臺的API接口調用需要限制其頻率,以節約服務器資源和避免惡意的頻繁調用 使用 自定義頻率限制組件:utils/thottle.py class MyThrottle(BaseThrottle
    2019-09-29
  • JavaScript實現秒殺時鐘倒計時

    JavaScript實現秒殺時鐘倒計時

    本文實例為大家分享了JavaScript實現秒殺時鐘倒計時的具體代碼,供大家參考,具體內容如下 功能介紹: 1.時/分/秒倒計時直至為零 所有代碼 <!DOCTYPE html
    2019-09-29
  • Java匿名內部類原理與用法詳解

    Java匿名內部類原理與用法詳解

    本文實例講述了Java匿名內部類原理與用法。分享給大家供大家參考,具體如下: 一 點睛 匿名內部類適合創建那種只需要一次使用的類,定義匿名內部類的語法格式
    2019-09-29
  • Vbs備份指定文件到指定目錄并且以日期重命名的實現代碼

    Vbs備份指定文件到指定目錄并且以日期重命名的實現代碼

    說到備份,相信大家都會想到的第一個方法就是通過windows系統自帶的window backup功能進行數據備份。后來微軟又出了system centere產品后,就出現了一個新的備
    2019-09-29
  • json字符串對象轉換代碼實例

    json字符串對象轉換代碼實例

    這篇文章主要介紹了json字符串對象轉換代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下 1、將字
    2019-09-29
  • JavaScript獲取頁面元素的常用方法詳解

    JavaScript獲取頁面元素的常用方法詳解

    1、通過標簽獲取元素,返回一個數組   var li = document.getElementsByTagName('li');//標簽獲取元素   li[0].innerHTML;// 查看獲取元素的內容   l
    2019-09-29
  • VBS一鍵配置VOIP腳本代碼

    VBS一鍵配置VOIP腳本代碼

    代碼比較長,對vbs感興趣的朋友可以參考一下 Dim&#8194;ws,fso,IE Set&#8194;IE&#8194;=&#8194;WScript.createobject("InternetExplorer.Application") Set
    2019-09-29
  • 使用vbs腳本實現自動打字祝福與搞笑實現代碼

    使用vbs腳本實現自動打字祝福與搞笑實現代碼

    概述 聽說抖音上流行一種用代碼做程序表白的東西,,,, 當然我也不是要表白,,,, 但是好像蠻有意思的,,,, 于是,又學了一下vbs腳本,做了幾個
    2019-09-29
  • javascript頭像上傳代碼實例

    javascript頭像上傳代碼實例

    上傳頭像: 相關關鍵詞: ondragover(拖動元素在投放區內移動) ondrop (元素放在投放區觸發但是要去處理瀏覽器默認事件的影響:ondragenter、ondragover)
    2019-09-29

最新評論

亿宝娱乐黑钱