基于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的Flask框架中实现登录用户的个人资料和头像的教程
Apr 20 Python
Python类的用法实例浅析
May 27 Python
基于Python 的进程管理工具supervisor使用指南
Sep 18 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
Feb 21 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
Python如何对齐字符串
Jul 30 Python
python,Java,JavaScript实现indexOf
Sep 09 Python
python如何快速拼接字符串
Oct 28 Python
python dir函数快速掌握用法技巧
Dec 09 Python
python反扒机制的5种解决方法
Feb 06 Python
解决pytorch 模型复制的一些问题
Mar 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
用PHP和ACCESS写聊天室(一)
2006/10/09 PHP
[转帖]PHP世纪万年历
2006/12/06 PHP
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
PHP学习笔记之数组篇
2011/06/28 PHP
laravel执行php artisan migrate报错的解决方法
2019/10/09 PHP
网页常用特效代码整理
2006/06/23 Javascript
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
js去除重复字符串两种实现方法
2013/01/09 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
vue实现单选和多选功能
2017/08/11 Javascript
Vue基于NUXT的SSR详解
2017/10/24 Javascript
微信小程序实现YDUI的ScrollNav组件
2018/02/02 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
为Python的web框架编写前端模版的教程
2015/04/30 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
Python实现常见的回文字符串算法
2018/11/14 Python
python write无法写入文件的解决方法
2019/01/23 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
2020/11/17 Python
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
幼教毕业生自我鉴定
2014/01/12 职场文书
交通事故委托书范本
2014/09/28 职场文书
同步小康驻村工作简报
2015/07/20 职场文书