您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python实现大文本文件分割成多个小文件

51自学网 2021-10-30 22:44:18
  python
这篇教程python实现大文本文件分割成多个小文件写得很实用,希望能帮到您。

本文介绍一种将一个大的文本文件分割成多个小文件的方法

方法一:

1.读取文章所有的行,并存入列表中
2.定义分割成的小文本的行数
3.将原文本内容按一定行数依次写入小文件中
4.此方法对较小的大文件比较适合

代码:

#coding:utf-8#将大文本文件分割成多个小文本文件import ossourceFileName = "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 + 1def 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 osfilename = "track.log"#需要进行分割的文件size = 10000000 #分割大小10Mdef 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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持51zixue.net。


Selenium爬取b站主播头像并以昵称命名保存到本地
python爬虫框架feapder的使用简介
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。