主頁(yè) > 知識(shí)庫(kù) > python實(shí)現(xiàn)大文本文件分割成多個(gè)小文件

python實(shí)現(xiàn)大文本文件分割成多個(gè)小文件

熱門(mén)標(biāo)簽:上海機(jī)器人外呼系統(tǒng)哪家好 地圖標(biāo)注的意義點(diǎn) 房產(chǎn)電銷外呼系統(tǒng) 地圖制圖標(biāo)注位置改變是移位嗎 地圖標(biāo)注微信發(fā)送位置不顯示 南京銷售外呼系統(tǒng)軟件 浙江電銷卡外呼系統(tǒng)好用嗎 蓋州市地圖標(biāo)注 315電話機(jī)器人廣告

本文介紹一種將一個(gè)大的文本文件分割成多個(gè)小文件的方法

方法一:

1.讀取文章所有的行,并存入列表中
2.定義分割成的小文本的行數(shù)
3.將原文本內(nèi)容按一定行數(shù)依次寫(xiě)入小文件中
4.此方法對(duì)較小的大文件比較適合

代碼:

#coding:utf-8
#將大文本文件分割成多個(gè)小文本文件
import os

sourceFileName = "test.log" #定義要分割的文件
def cutFile():
    print("正在讀取文件...")
    sourceFileData = open(sourceFileName,'r',encoding='utf-8')
    ListOfLine = sourceFileData.read().splitlines()#將讀取的文件內(nèi)容按行分割,然后存到一個(gè)列表中
    n = len(ListOfLine)
    print("文件共有"+str(n)+"行")
    print("請(qǐng)輸入需要將文件分割的個(gè)數(shù):")
    m = int(input("")) #定義分割的文件個(gè)數(shù)
    p = n//m + 1
    print("需要將文件分成"+str(m)+"個(gè)子文件")
    print("每個(gè)文件最多有"+str(p)+"行")
    print("開(kāi)始進(jìn)行分割···")
    for i in range(m):
        print("正在生成第"+str(i+1)+"個(gè)子文件")
        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ù),并寫(xiě)入新的文件中,對(duì)于較大文件,采用此方法

import os

#要分割的文件 
source_file='track.log'

#定義每個(gè)子文件的行數(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: #跳過(guò)空行
                buf.append(line)
                #如果行數(shù)超過(guò)指定的數(shù),且數(shù)據(jù)為一個(gè)完整的記錄,則將buf寫(xiě)入到一個(gè)子文件中,并初始化buf
                line_tag=line.strip()[0] #取每一行第一個(gè)字符,如果該行為空,會(huì)報(bào)錯(cuò),故加上前面判斷
                if len(buf) >= count and line_tag == '*': #每一個(gè)新的記錄數(shù)據(jù)是從*標(biāo)識(shí)開(kāi)始
                    buf = buf[:-1]
                    sub = mk_SubFile(buf,filename,sub) #將buf寫(xiě)入子文件中
                    buf = [line] #初始化下一個(gè)子文件的buf,第一行為*開(kāi)頭的
                
        #最后一個(gè)文件,文件行數(shù)可能不足指定的數(shù)
        if len(buf) != 0:
            sub = mk_SubFile(buf,filename,sub)
    print("ok")


if __name__ == '__main__':
    split_By_LineCount(source_file,file_count)#要分割的文件名和每個(gè)子文件的行數(shù)

方法二中日志格式如下:

每一條完整的是記錄是以*號(hào)開(kāi)頭,為了在子文件中不出現(xiàn)被截?cái)嗟臄?shù)據(jù)記錄,因此需要確保每一個(gè)buf中是完整的記錄,判斷方法見(jiàn)代碼

方法三:基于大小分割

# -*- coding: utf-8 -*-

#這種方法是按照大小分割文件,會(huì)存在同一行被分割在兩個(gè)文件中的情況

import os

filename = "track.log"#需要進(jìn)行分割的文件
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)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • python分割文件的常用方法
  • Python 逐行分割大txt文件的方法
  • python實(shí)現(xiàn)按行分割文件
  • python簡(jiǎn)單分割文件的方法
  • 用python分割TXT文件成4K的TXT文件
  • Python實(shí)現(xiàn)分割文件及合并文件的方法
  • python 讀txt文件,按‘,’分割每行數(shù)據(jù)操作
  • Python實(shí)現(xiàn)模擬分割大文件及多線程處理的方法
  • python實(shí)現(xiàn)將文件夾內(nèi)的每張圖片批量分割成多張
  • Python中使用pypdf2合并、分割、加密pdf文件的代碼詳解

標(biāo)簽:臨汾 赤峰 陽(yáng)泉 雙鴨山 克拉瑪依 日照 貴州 金華

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python實(shí)現(xiàn)大文本文件分割成多個(gè)小文件》,本文關(guān)鍵詞  python,實(shí)現(xiàn),大,文本,文件,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python實(shí)現(xiàn)大文本文件分割成多個(gè)小文件》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于python實(shí)現(xiàn)大文本文件分割成多個(gè)小文件的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章