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()
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值