侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Python  /  管理员 发布于 7年前   171

日志文件分割、命名

工作中经常会收到测试同学、客户同学提供的日志文件,其中不乏几百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使用opencv实现马赛克效果示例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客