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

作者:

文章目录
  • 工作线上报错了,找运维下载了线上的日志文件排查问题,但是日志文件太大了,没办法用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通过TimedRotatingFileHandler按时间切割日志 Python自动化按日期分割日志的多种方法 python中的日志文件按天分割 Python中logging日志记录到文件及自动分割的操作代码 python logging模块书写日志以及日志分割详解 python多进程下实现日志记录按时间分割 python实现日志按天分割 python+logging+yaml实现日志分割
  • 目录
    • 背景
    • 方法一:指定目标文件数量分割
    • 方法二:指定文件大小分割
    • 方法三:指定目标行数分割

    工作线上报错了,找运维下载了线上的日志文件排查问题,但是日志文件太大了,没办法用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通过TimedRotatingFileHandler按时间切割日志
    • Python自动化按日期分割日志的多种方法
    • python中的日志文件按天分割
    • Python中logging日志记录到文件及自动分割的操作代码
    • python logging模块书写日志以及日志分割详解
    • python多进程下实现日志记录按时间分割
    • python实现日志按天分割
    • python+logging+yaml实现日志分割

    站内搜索