Python切割大日志文件几种方法

 更新时间:2025年12月28日 15:17:40   作者:IT-Lenjor  
文本文介绍了如何通过三种方式处理过大日志文件,包括按文件数量、按文件大小和按行数分割,以方便排查问题,感兴趣的可以了解一下

背景

工作线上报错了,找运维下载了线上的日志文件排查问题,但是日志文件太大了,没办法用NotePad++打开,于是乎想着要切割一下日志文件

方法一:指定目标文件数量分割

import os

# 要分割的文件
sourceFileName = 'normal-app.log'
# 分割的文件个数
fileNum = 10       

def cutFile():
    print("正在读取文件...")
    sourceFileData = open(sourceFileName, 'r', encoding='utf-8')
    ListOfLine = sourceFileData.read().splitlines()  # 将读取的文件内容按行分割,然后存到一个列表中
    totalLine = len(ListOfLine)
    print("文件共有" + str(totalLine) + "行")
    print("请输入需要将文件分割的个数:") 
    p = totalLine//fileNum + 1
    print("需要将文件分成"+str(fileNum)+"个子文件")
    print("每个文件最多有"+str(p)+"行")
    print("开始进行分割···")
    for i in range(fileNum):
        destFileName = os.path.splitext(sourceFileName)[
            0] + "_" + str(i + 1)+".log"
        print("正在生成子文件" + destFileName)
        destFileData = open(destFileName, "w", encoding='utf-8')
        if(i == fileNum-1):
            for line in ListOfLine[i*p:]:
                destFileData.write(line+'\n')
        else:
            for line in ListOfLine[i*p:(i+1)*p]:
                destFileData.write(line+'\n')
        destFileData.close()
    print("分割完成")

if __name__ == '__main__':
    cutFile()

方法二:指定文件大小分割

这种方法是按照大小分割文件,会存在同一行被分割在两个文件中的情况

import os

filename = "normal-app.log"  # 需要进行分割的文件
size = 10000000  # 分割大小10M

def createSubFile(srcName, sub, buf):
    [des_filename, extname] = os.path.splitext(srcName)
    filename = des_filename + '_' + str(sub) + extname
    print('正在生成子文件: %s' % filename)
    with open(filename, 'wb') as fout:
        fout.write(buf)
        return sub+1
        
def cutFile(filename, size):
    with open(filename, 'rb') as fin:
        buf = fin.read(size)
        sub = 1
        while len(buf) > 0:
            sub = createSubFile(filename, sub, buf)
            buf = fin.read(size)
    print("ok")

if __name__ == "__main__":
    cutFile(filename, size)

方法三:指定目标行数分割

import os

# 要分割的文件
sourceFileName = 'normal-app.log'
 # 定义分割的行数
lineNum = 100000    

def cutFile():
    print("正在读取文件...")
    sourceFileData = open(sourceFileName, 'r', encoding='utf-8')
    ListOfLine = sourceFileData.read().splitlines()  # 将读取的文件内容按行分割,然后存到一个列表中
    totalLine = len(ListOfLine)
    print("文件共有" + str(totalLine) + "行")
    print("请输入需要将文件分割的个数:") 
    fileNum = totalLine//lineNum + 1
    print("需要将文件分成"+str(fileNum)+"个子文件")
    print("开始进行分割···")
    for i in range(fileNum):
        destFileName = os.path.splitext(sourceFileName)[
            0] + "_" + str(i + 1)+".log"
        print("正在生成子文件" + destFileName)
        destFileData = open(destFileName, "w", encoding='utf-8')
        if(i == fileNum-1):
            for line in ListOfLine[i*lineNum:]:
                destFileData.write(line+'\n')
        else:
            for line in ListOfLine[i*lineNum:(i+1)*lineNum]:
                destFileData.write(line+'\n')
        destFileData.close()
    print("分割完成")

if __name__ == '__main__':
    cutFile()

到此这篇关于Python切割大日志文件几种方法的文章就介绍到这了,更多相关Python切割大日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中的 if 语句及使用方法

    Python中的 if 语句及使用方法

    这篇文章主要介绍了Python中的 if 语句及使用方法,包括条件测试、if -else 语句、if -elif-else 语句以及使用 if 语句处理列表操作,下面内容详细介绍组要的小伙伴可以参考一下
    2022-03-03
  • windows下pycharm搭建spark环境并成功运行 附源码

    windows下pycharm搭建spark环境并成功运行 附源码

    这篇文章主要介绍了windows下pycharm搭建spark环境并成功运行 附源码,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • python seaborn heatmap可视化相关性矩阵实例

    python seaborn heatmap可视化相关性矩阵实例

    这篇文章主要介绍了python seaborn heatmap可视化相关性矩阵实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python3 如何使用 goto 跳转执行到指定代码行

    python3 如何使用 goto 跳转执行到指定代码行

    这篇文章主要介绍了python3 使用goto跳转执行到指定代码行的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • python Multiprocessing.Pool进程池模块详解

    python Multiprocessing.Pool进程池模块详解

    multiprocessing模块提供了一个Process类来代表一个进程对象,multiprocessing模块像线程一样管理进程,这个是multiprocessing的核心,它与threading很相似,对多核CPU的利用率会比threading好的多
    2022-10-10
  • python算法与数据结构朋友圈与水杯实验题分析实例

    python算法与数据结构朋友圈与水杯实验题分析实例

    这篇文章主要介绍了python算法与数据结构朋友圈与水杯实验题分析,总的来说这并不是难题,那为什么要拿出这道题介绍?拿出这道题真正想要传达的是解题的思路,以及不断优化探寻最优解的过程。希望通过这道题能给你带来一种解题优化的思路
    2022-12-12
  • Pandas DataFrame数据存储格式比较分析

    Pandas DataFrame数据存储格式比较分析

    Pandas 支持多种存储格式,在本文中将对不同类型存储格式下的Pandas Dataframe的读取速度、写入速度和大小的进行测试对比,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2023-09-09
  • Python中的变量及简单数据类型应用

    Python中的变量及简单数据类型应用

    这篇文章主要介绍了Python中的变量及简单数据类型应用,简单的数据类型包括字符串和数字,更多详细内容,需要的小伙伴可以参考一下
    2022-03-03
  • Python网络编程之socket与socketserver

    Python网络编程之socket与socketserver

    这篇文章介绍了Python网络编程之socket与socketserver,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • python获取当前运行函数名称的方法实例代码

    python获取当前运行函数名称的方法实例代码

    这篇文章主要介绍了python获取当前运行函数名称的方法实例代码的相关资料,需要的朋友可以参考下
    2017-04-04

最新评论