基于Python实现大文件分割和命名脚本过程解析


Posted in Python onSeptember 29, 2019

日志文件分割、命名

工作中经常会收到测试同学、客户同学提供的日志文件,其中不乏几百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 相关文章推荐
windows下wxPython开发环境安装与配置方法
Jun 28 Python
python学习必备知识汇总
Sep 08 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
Python实现的列表排序、反转操作示例
Mar 13 Python
Python-Tkinter Text输入内容在界面显示的实例
Jul 12 Python
用Python从0开始实现一个中文拼音输入法的思路详解
Jul 20 Python
Python字节单位转换实例
Dec 05 Python
python2和python3哪个使用率高
Jun 23 Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 Python
Django多数据库联用实现方法解析
Nov 12 Python
Matplotlib animation模块实现动态图
Feb 25 Python
2021年pycharm的最新安装教程及基本使用图文详解
Apr 03 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
Sep 28 #Python
python使用opencv实现马赛克效果示例
Sep 28 #Python
python打包成so文件过程解析
Sep 28 #Python
python基于FTP实现文件传输相关功能代码实例
Sep 28 #Python
python网络爬虫 Scrapy中selenium用法详解
Sep 28 #Python
在vscode中配置python环境过程解析
Sep 28 #Python
python爬虫 线程池创建并获取文件代码实例
Sep 28 #Python
You might like
快速配置PHPMyAdmin方法
2008/06/05 PHP
PHP原理之异常机制深入分析
2010/08/08 PHP
PHP二维数组排序简单实现方法
2016/02/14 PHP
Yii实现简单分页的方法
2016/04/29 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
php显示页码分页类的封装
2017/06/08 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
js toFixed()方法的重写实现精度的统一
2014/03/06 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
2017/07/20 Javascript
微信小程序页面生命周期详解
2018/01/31 Javascript
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
[01:04:01]2014 DOTA2华西杯精英邀请赛5 24 DK VS VG
2014/05/25 DOTA
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
[51:39]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第二场 2月7日
2021/03/11 DOTA
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
python生成日历实例解析
2014/08/21 Python
举例讲解Python的Tornado框架实现数据可视化的教程
2015/05/02 Python
Python的pycurl包用法简介
2015/11/13 Python
flask框架视图函数用法示例
2018/07/19 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
CSS3 边框效果
2019/11/04 HTML / CSS
廉洁家庭事迹材料
2014/05/15 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
2014年青年教师工作总结
2014/12/17 职场文书