本文介紹一種將一個大的文本文件分割成多個小文件的方法
方法一:
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ù)是從*標(biāo)識開始
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)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- python分割文件的常用方法
- Python 逐行分割大txt文件的方法
- python實現(xiàn)按行分割文件
- python簡單分割文件的方法
- 用python分割TXT文件成4K的TXT文件
- Python實現(xiàn)分割文件及合并文件的方法
- python 讀txt文件,按‘,’分割每行數(shù)據(jù)操作
- Python實現(xiàn)模擬分割大文件及多線程處理的方法
- python實現(xiàn)將文件夾內(nèi)的每張圖片批量分割成多張
- Python中使用pypdf2合并、分割、加密pdf文件的代碼詳解