基于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最基本的操作字典的方法
Apr 24 Python
简单的连接MySQL与Python的Bottle框架的方法
Apr 30 Python
举例讲解Python编程中对线程锁的使用
Jul 12 Python
python如何通过twisted实现数据库异步插入
Mar 20 Python
详解Python中的type和object
Aug 15 Python
Python实战之制作天气查询软件
May 14 Python
在Python中构建增广矩阵的实现方法
Jul 01 Python
python中return的返回和执行实例
Dec 24 Python
浅谈django 模型类使用save()方法的好处与注意事项
Mar 28 Python
Python类的继承super相关原理解析
Oct 22 Python
Requests什么的通通爬不了的Python超强反爬虫方案!
May 20 Python
使用python绘制横竖条形图
Apr 21 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
玩转图像函数库―常见图形操作
2006/09/03 PHP
用php实现的下载css文件中的图片的代码
2010/02/08 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
php打包网站并在线压缩为zip
2016/02/13 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
使用Javascript简单实现图片无缝滚动
2014/12/05 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
angularjs2中父子组件的数据传递的实例代码
2017/07/05 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
vue调用本地摄像头实现拍照功能
2020/08/14 Javascript
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
10款最好的Python开发编辑器
2019/07/03 Python
解决python 上传图片限制格式问题
2019/10/30 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
Linux如何为某个操作添加别名
2013/03/01 面试题
酒店前台接待岗位职责
2013/12/03 职场文书
历史专业个人求职信范文
2013/12/07 职场文书
小学教师师德反思
2014/02/03 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
代理人委托书
2014/08/01 职场文书
法定代表人授权委托书
2014/09/19 职场文书
消防演习通知
2015/04/25 职场文书
JS ES6异步解决方案
2021/04/29 Javascript
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python
Go语言的协程上下文的几个方法和用法
2022/04/11 Golang