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

方法一:

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 + 1print("需要将文件分成"+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) + extnameprint( '正在生成子文件: %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 = 1for line in fin:if len(line.strip())>0: #跳过空行buf.append(line)#如果行数超过指定的数,且数据为一个完整的记录,则将buf写入到一个子文件中,并初始化bufline_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) + extnameprint( '正在生成子文件: %s' %filename)with open(filename,'wb') as fout:fout.write(buf)return sub+1def split_By_size(filename,size):with open(filename,'rb') as fin:buf = fin.read(size)sub = 1while len(buf)>0:sub = mk_SubFile(filename,sub,buf)buf = fin.read(size)  print("ok")if __name__=="__main__":split_By_size(filename, size)

将大文本文件分割成多个小文件相关推荐

  1. 如何将一个文件分割成多个小文件

    你也许会遇到到这样一个问题?当你有一个较大的软件,而无法用一张软盘将其全部拷下时,你也许会想 到该将它分解开,分盘拷回去后,再将它们合并起来.现在的这种分割工具很多,你想自己动手做一个适合自己的分割工 ...

  2. c语言文件分割与合并程序详解,如何实现将一个文件分割成多个小文件

    你也许会遇到到这样一个问题?当你有一个较大的软件,而无法用一张软盘将其全部拷下时,你也许会想到该将它分解开,分盘拷回去后,再将它们合并起来.现在的这种分割工具很多,你想自己动手做一个适合自己的分割工具 ...

  3. Java把一个大集合拆分成多个小集合,可以利用多线程提升并发处理效率

    场景: 在开发中,如果一个集合中的数据量特别大,那么对这个集合进行循环处理业务可能就会比较耗时,为了提升效率,可以考虑把大集合拆分成多个小集合,然后用多线程对拆分后的多个小集合进行处理 拆分: 1.拆 ...

  4. python大列表分割成小列表_Python有什么方法将列表分割成大小均匀的块?求使用实例...

    Python有什么方法将列表分割成大小均匀的块?求使用实例.我有一个任意长度的列表,我需要把它分成大小相等的块并对它进行操作.有一些很明显的方法可以做到这一点,比如保留一个计数器和两个列表,当第二个列 ...

  5. php对视频分割,视频分割软件,将一个视频分割成多段小的视频,如何对视频进行剪切...

    今天早上小编走在上班的路上,微风轻拂,树叶纷纷掉落,一片片泛黄的树叶,宛若落英一般纷飞,实在是美妙极了,正所谓一叶知秋,看着这满地落叶,小编不禁心想,是不是秋天快要到了.好了,不管秋天到不到,还是要继 ...

  6. java将一个大文件拆分成几个小文件输出

    java读取一个大文件写到多个小文件 最近看Java面试中有问到关于利用java io流,读取一个大文件,然后输出到几个小文件的问题,这里自己写了个简单的sample public static vo ...

  7. python将大文件拆分成多个小文件,同时对各小文件处理以节省时间

    # test.py import json import osroot_path = os.path.dirname(__file__)def f(x):return xtest_datas = [] ...

  8. 视频分割软件,将一个视频分割成多段小的视频

    如今已是深秋,正所谓一叶知秋,看着这满地落叶,大家期待的中秋佳节和十一小长假也就快要到来了,不过对于小编这样的剪辑爱好者当然是要在家中剪辑视频了.不知道有没有和小编一样的呢?今天小编要给大家分享一个分 ...

  9. java 文件分隔_java 实现大文件分隔成多个小文件

    public class FileTest { /** * 文件分隔器:给定文件的路径和每一块要拆分的大小,就可以按要求拆分文件 * 如果指定的块给原文件都还要大,为了不动原文件,就生成另一个文件,以 ...

  10. 将一张图片分割成多张小图片 Python3

最新文章

  1. 安装SecureCRT
  2. 一键添加JAVA环境变量
  3. 函数计算 GB 镜像秒级启动:下一代软硬件架构协同优化
  4. linux子进程父进程例子,linux 子进程访问父进程
  5. java autointeger_【Java多线程】线程安全的Integer,AutomicInteger
  6. 使用 Python 多处理库处理 3D 数据
  7. 老顽童java模拟器_在这款神还原的小霸王模拟器上,我终于玩到了20年前的老游戏,真香...
  8. html怎么实现年月日的选择,利用select实现年月日三级联动的日期选择效果【推荐】...
  9. 斗地主功能测试实战二之用例设计
  10. 【统计学】利用spss正态分布假定检验 S-W检验 K-S检验 直方图 Q-Q图
  11. 多元逻辑回归 · 数学推导过程及代码实现完全解析
  12. 图像原点矩、二阶中心矩物理意义推导
  13. 库克说他在上大学时学会了编程,你呢?
  14. 【StyleGAN代码学习】StyleGAN损失函数与训练过程
  15. 2018福大软工实践第十二次作业
  16. 刷(shui)题记录 2021.12
  17. 同时安装Office和Visio
  18. html精灵图坐标如何确定,CSS实现精灵图与字体图标
  19. 分享我的一些PJBlog小技巧
  20. 用小米手机的都是屌丝???

热门文章

  1. _GLIBCXX_USE_CXX11_ABI 定义不一致带来的宕机问题
  2. Linux界面美化---Zsh终端
  3. .NET选择模板添加书签导出Word文档,Web导出至Excel。WordHelp类和ExcelHelp类
  4. 基于长短期记忆网络(LSTM)的意见领袖对舆论风向的研究、网络暴力研究、LSTM情感分分类、意见领袖的影响力、神经网络实战、数据分析实战、蔡徐坤潘长江网络暴力事件、数据可视化实战、舆情研究
  5. xp 架设网站服务器,WinXP如何设置iis服务器?WinXP iis服务器设置教程
  6. 三层交换机转发原理与实验(三层交换技术原理,MLS条目,虚接口详解与配置)
  7. android 控件宽度自适应_自适应各Android手机屏幕尺寸的解决方法
  8. 山东理工ACM[2108]一元二次方程Ⅲ
  9. Python列表排序_revered逆序_max_min_sum
  10. android parcel分析,android – 从Intent检索时Parcel崩溃