python实现大文本文件分割成多个小文件
作者:Jepson2017 发布时间:2022-02-18 12:36:06
标签:python,文件,分割
本文介绍一种将一个大的文本文件分割成多个小文件的方法
方法一:
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)
来源:https://blog.csdn.net/d1240673769/article/details/77513091


猜你喜欢
- 学习目标:对二值图进行分析,设定最大最小面积区间保留该面积区间内的区域示例代码//src为二值图,minArea、maxArea为面积阈值,
- 我们都知道tensorflow框架可以使用tensorboard这一高级的可视化的工具,为了使用tensorboard这一套完美的可视化工具
- 以下是涉及到插入表格的查询的5种改进方法:1)使用LOAD DATA INFILE从文本下载数据这将比使用插入语句快20倍。2)使用带有多个
- 本文实例讲述了Python实现的多线程http压力测试代码。分享给大家供大家参考,具体如下:# Python version 3.3__au
- 1、简介在python自动化中,我们传递一些参数是需要从文件中读取过来的,读取过来的字典并非python对象数据类型而是string类型。这
- 深度学习网络通常具有很深的层次结构,而且层与层之间通常会有并联、串联等连接方式。当使用PyTorch建立一个深度学习网络并输出文本向读者展示
- 本文实例为大家分享了python绘制直方图的具体代码,供大家参考,具体内容如下用两列数据绘制直方图#coding=gbkimport xlw
- 本文实例为大家分享了python爬虫爬取淘宝商品的具体代码,供大家参考,具体内容如下1、需求目标 : 进去淘宝页面,搜索耐克关键词,抓取 商
- 1、打开文件open()函数简介 :打开文件使用open函数,可以打开一个已经存在的文件,如果没有这个文件的话,会创建一个新文件完整的语法格
- 1.自定义线程池import threadingimport Queueimport timequeue = Queue.Queue()de
- 这几天在用golang写一个工具,要执行外部命令工具,而且还要将外部命令工具输出的日志也要输出出来。网上找了一下,资料很多,关键是执行的结果
- 问题一: 使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode big endian和UTF-8这几种编码方式
- 和设计师打过交道的人一定也见到过少数极品,不是扎着小辫子留着小胡子,就是剃了光头抽根烟,通常说起来一套一套的人作品都很一般般,而作品一般般的
- 使用go语言实现具备以下功能的简易区块链区块与区块链共识机制数据库Cli命令行操作交易管理密码学数字签名交易缓存池P2P网络管理由于平时还要
- 在我们日常接触到的Python中,狭义的缺失值一般指DataFrame中的NaN。广义的话,可以分为三种。缺失值:在Pandas中的缺失值有
- 左右布局,图片的宽度不固定。正好前几天测试闭合浮动元素时发现了overflow的特殊现象,倒是正好可以用在这里。测试通过:ie6/7&nbs
- psutil是一个跨平台进程和系统监控的Python库,而gopsutil是其Go语言版本的实现。本文介绍了它的基本使用。Go语言部署简单、
- 如果你计划将数据库从SQL Server 2000 升级到 SQL Server 2005。你在升级之前一定会测试每样东西,并且证明应用程序
- 如果你是一位ASP爱好者,你一定想过ASP的执行效率如何?大家都知道ASP效率和CGI的比,在访问量少的时候,它们是不相上下的,有时可能CG
- 停止MySQL服务Windows可以右键我的电脑--管理--服务和应用程序--服务--找到对应的服务停止掉免密登录切换到MySQL安装路径下