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

导读:本篇文章讲解 Python切割大日志文件几种方法,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

背景

工作线上报错了,找运维下载了线上的日志文件排查问题,但是日志文件太大了,没办法用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()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/4582.html

(0)
小半的头像小半

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!