基于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 相关文章推荐
跟老齐学Python之集合(set)
Sep 24 Python
详解Python编程中time模块的使用
Nov 20 Python
python print 按逗号或空格分隔的方法
May 02 Python
Python批量生成幻影坦克图片实例代码
Jun 04 Python
flask框架路由常用定义方式总结
Jul 23 Python
Python字符串中添加、插入特定字符的方法
Sep 10 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
Django 返回json数据的实现示例
Mar 05 Python
完美解决keras保存好的model不能成功加载问题
Jun 11 Python
python 实现端口扫描工具
Dec 18 Python
用python批量移动文件
Jan 14 Python
python文本处理的方案(结巴分词并去除符号)
May 26 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
PHP 日期时间函数的高级应用技巧
2009/10/10 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
提高jQuery性能的十个诀窍
2013/11/14 Javascript
老生常谈angularjs中的$state.go
2017/04/24 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
python中返回矩阵的行列方法
2018/04/04 Python
python logging日志模块以及多进程日志详解
2018/04/18 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
Django重设Admin密码过程解析
2020/02/10 Python
浅谈优化Django ORM中的性能问题
2020/07/09 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
Hotels.com南非:酒店预订
2017/11/02 全球购物
丽笙酒店官方网站:Radisson Hotels
2019/05/07 全球购物
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
业务副厂长岗位职责
2014/01/03 职场文书
考试违纪检讨书
2014/02/02 职场文书
安全横幅标语
2014/06/09 职场文书
安全教育主题班会总结
2015/08/14 职场文书
技术入股协议书
2016/03/22 职场文书
500字作文之周记
2019/12/13 职场文书
Python图片检索之以图搜图
2021/05/31 Python