您好,登錄后才能下訂單哦!
小編給大家分享一下python如何實現(xiàn)大文本文件分割成多個小文件,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
Python是一種編程語言,內(nèi)置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強大,在許多領(lǐng)域中都有廣泛的應(yīng)用,例如最熱門的大數(shù)據(jù)分析,人工智能,Web開發(fā)等。
1.讀取文章所有的行,并存入列表中
2.定義分割成的小文本的行數(shù)
3.將原文本內(nèi)容按一定行數(shù)依次寫入小文件中
4.此方法對較小的大文件比較適合
代碼:
#coding:utf-8 #將大文本文件分割成多個小文本文件 import os sourceFileName = "test.log" #定義要分割的文件 def cutFile(): print("正在讀取文件...") sourceFileData = open(sourceFileName,'r',encoding='utf-8') ListOfLine = sourceFileData.read().splitlines()#將讀取的文件內(nèi)容按行分割,然后存到一個列表中 n = len(ListOfLine) print("文件共有"+str(n)+"行") print("請輸入需要將文件分割的個數(shù):") m = int(input("")) #定義分割的文件個數(shù) p = n//m + 1 print("需要將文件分成"+str(m)+"個子文件") print("每個文件最多有"+str(p)+"行") print("開始進行分割···") for i in range(m): print("正在生成第"+str(i+1)+"個子文件") destFileName = os.path.splitext(sourceFileName)[0]+"_part"+str(i)+".log" #定義分割后新生成的文件 destFileData = open(destFileName,"w",encoding='utf-8') if(i==m-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("分割完成") cutFile()
依次讀取指定行數(shù)的數(shù)據(jù),并寫入新的文件中,對于較大文件,采用此方法
import os #要分割的文件 source_file='track.log' #定義每個子文件的行數(shù) file_count=10000 #根據(jù)需要自定義 def mk_SubFile(lines,srcName,sub): [des_filename, extname] = os.path.splitext(srcName) filename = des_filename + '_' + str(sub) + extname print( '正在生成子文件: %s' %filename) with open(filename,'wb') as fout: fout.writelines(lines) return sub + 1 def split_By_LineCount(filename,count): with open(filename,'rb') as fin: buf = [] sub = 1 for line in fin: if len(line.strip())>0: #跳過空行 buf.append(line) #如果行數(shù)超過指定的數(shù),且數(shù)據(jù)為一個完整的記錄,則將buf寫入到一個子文件中,并初始化buf line_tag=line.strip()[0] #取每一行第一個字符,如果該行為空,會報錯,故加上前面判斷 if len(buf) >= count and line_tag == '*': #每一個新的記錄數(shù)據(jù)是從*標識開始 buf = buf[:-1] sub = mk_SubFile(buf,filename,sub) #將buf寫入子文件中 buf = [line] #初始化下一個子文件的buf,第一行為*開頭的 #最后一個文件,文件行數(shù)可能不足指定的數(shù) if len(buf) != 0: sub = mk_SubFile(buf,filename,sub) print("ok") if __name__ == '__main__': split_By_LineCount(source_file,file_count)#要分割的文件名和每個子文件的行數(shù)
方法二中日志格式如下:
每一條完整的是記錄是以*號開頭,為了在子文件中不出現(xiàn)被截斷的數(shù)據(jù)記錄,因此需要確保每一個buf中是完整的記錄,判斷方法見代碼
# -*- coding: utf-8 -*- #這種方法是按照大小分割文件,會存在同一行被分割在兩個文件中的情況 import os filename = "track.log"#需要進行分割的文件 size = 10000000 #分割大小10M def mk_SubFile(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 split_By_size(filename,size): with open(filename,'rb') as fin: buf = fin.read(size) sub = 1 while len(buf)>0: sub = mk_SubFile(filename,sub,buf) buf = fin.read(size) print("ok") if __name__=="__main__": split_By_size(filename, size)
看完了這篇文章,相信你對“python如何實現(xiàn)大文本文件分割成多個小文件”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。