基于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 相关文章推荐
在Django框架中编写Contact表单的教程
Jul 17 Python
Python中条件判断语句的简单使用方法
Aug 21 Python
python函数的5种参数详解
Feb 24 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
May 19 Python
python pandas中DataFrame类型数据操作函数的方法
Apr 08 Python
python中验证码连通域分割的方法详解
Jun 04 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
Python基本socket通信控制操作示例
Jan 30 Python
Python笔记之观察者模式
Nov 20 Python
Python sqlalchemy时间戳及密码管理实现代码详解
Aug 01 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 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
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
JS 自动安装exe程序
2008/11/30 Javascript
JS实现根据出生年月计算年龄
2014/01/10 Javascript
js实现继承的5种方式
2015/12/01 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
BootStrap轻松实现微信页面开发代码分享
2016/10/21 Javascript
详解10分钟学会vue滚动行为
2017/09/21 Javascript
AngularJS中的作用域实例分析
2018/05/16 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
vue实现条件判断动态绑定样式的方法
2018/09/29 Javascript
Vue实现图书管理小案例
2020/12/03 Vue.js
Python类的用法实例浅析
2015/05/27 Python
Python的爬虫程序编写框架Scrapy入门学习教程
2016/07/02 Python
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
对numpy中的transpose和swapaxes函数详解
2018/08/02 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
2020/09/15 Python
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
生产副总岗位职责
2013/11/28 职场文书
采购主管的岗位职责
2013/12/17 职场文书
中学清明节活动总结
2014/07/04 职场文书
单位授权委托书范本
2014/09/26 职场文书
社会工作专业自荐信
2014/09/26 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
讲文明倡议书
2015/04/29 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python
基于JavaScript实现省市联动效果
2021/06/22 Javascript
详解Python中*args和**kwargs的使用
2022/04/07 Python
Nginx报错104:Connection reset by peer问题的解决及分析
2022/07/23 Servers