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切割大日志內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python趣味挑戰(zhàn)之turtle庫繪畫飄落的銀杏樹
銀杏還是和恐龍同時代的植物,被稱為活化石,適應能力強,生長期漫長,壽命可達千年.因此,銀杏是長壽的代表和象征,接下來用Python的turtle庫來繪畫銀杏樹唯美的一幕,需要的朋友可以參考下2021-05-05
Python代碼使用 Pyftpdlib實現FTP服務器功能
FTP 服務器,在此之前我都是使用Linux的vsftpd軟件包來搭建FTP服務器的,現在發(fā)現了利用pyftpdlib可以更加簡單的方法即可實現FTP服務器的功能 ,需要的朋友可以參考下2019-07-07
python報錯TypeError: Input z must be
大家好,本篇文章主要講的是python報錯TypeError: Input z must be 2D, not 3D的解決方法,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下2021-12-12
Windows環(huán)境下如何使用Pycharm運行sh文件
這篇文章主要介紹了Windows環(huán)境下如何使用Pycharm運行sh文件,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02

