本文介绍一种将一个大的文本文件分割成多个小文件的方法
方法一:
1.读取文章所有的行,并存入列表中
2.定义分割成的小文本的行数
3.将原文本内容按一定行数依次写入小文件中
4.此方法对较小的大文件比较适合
代码:
#coding:utf-8 #将大文本文件分割成多个小文本文件 import os sourceFileName = \"test.log\" #定义要分割的文件 def cutFile(): print(\"正在读取文件...\") sourceFileData = open(sourceFileName,\'r\',encoding=\'utf-8\') ListOfLine = sourceFileData.read().splitlines()#将读取的文件内容按行分割,然后存到一个列表中 n = len(ListOfLine) print(\"文件共有\"+str(n)+\"行\") print(\"请输入需要将文件分割的个数:\") m = int(input(\"\")) #定义分割的文件个数 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()
方法二:
依次读取指定行数的数据,并写入新的文件中,对于较大文件,采用此方法
import os #要分割的文件 source_file=\'track.log\' #定义每个子文件的行数 file_count=10000 #根据需要自定义 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) #如果行数超过指定的数,且数据为一个完整的记录,则将buf写入到一个子文件中,并初始化buf line_tag=line.strip()[0] #取每一行第一个字符,如果该行为空,会报错,故加上前面判断 if len(buf) >= count and line_tag == \'*\': #每一个新的记录数据是从*标识开始 buf = buf[:-1] sub = mk_SubFile(buf,filename,sub) #将buf写入子文件中 buf = [line] #初始化下一个子文件的buf,第一行为*开头的 #最后一个文件,文件行数可能不足指定的数 if len(buf) != 0: sub = mk_SubFile(buf,filename,sub) print(\"ok\") if __name__ == \'__main__\': split_By_LineCount(source_file,file_count)#要分割的文件名和每个子文件的行数
方法二中日志格式如下:
每一条完整的是记录是以*号开头,为了在子文件中不出现被截断的数据记录,因此需要确保每一个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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
© 版权声明
THE END
暂无评论内容