python实现大文本文件分割成多个小文件


Posted in Python onApril 20, 2021

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

方法一:

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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中list列表的一些进阶使用方法介绍
Aug 15 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
Sep 18 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
Apr 11 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
python编程使用协程并发的优缺点
Sep 20 Python
python 实现turtle画图并导出图片格式的文件
Dec 07 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
Feb 21 Python
Django-rest-framework中过滤器的定制实例
Apr 01 Python
Python sklearn中的.fit与.predict的用法说明
Jun 28 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
Jan 06 Python
python 实现IP子网计算
Feb 18 Python
Python绘制分类图的方法
Pytest allure 命令行参数的使用
在pyCharm中下载第三方库的方法
Python控制台输出俄罗斯方块移动和旋转功能
Apr 18 #Python
深入理解python多线程编程
Apr 18 #Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 18 #Python
python批量更改目录名/文件名的方法
Apr 18 #Python
You might like
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
详解json在php中的应用
2018/09/30 PHP
PHP crc32()函数讲解
2019/02/14 PHP
用JavaScript隐藏控件的方法
2009/09/21 Javascript
javascript 模式设计之工厂模式学习心得
2010/04/27 Javascript
JQuery select标签操作代码段
2010/05/16 Javascript
JavaScript中Number.NEGATIVE_INFINITY值的使用详解
2015/06/05 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
举例简单讲解Python中的数据存储模块shelve的用法
2016/03/03 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
matplotlib.pyplot绘图显示控制方法
2019/01/15 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
django orm模块中的 is_delete用法
2020/05/20 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
Python实现微信表情包炸群功能
2021/01/28 Python
css3实现顶部社会化分享按钮示例
2014/05/06 HTML / CSS
如何使用localstorage代替cookie实现跨域共享数据问题
2018/04/18 HTML / CSS
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
给朋友的道歉信
2014/01/09 职场文书
电气自动化个人求职信范文
2014/02/03 职场文书
教学评估实施方案
2014/03/16 职场文书
村居抓节水倡议书
2014/05/19 职场文书
求职意向书
2014/07/29 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
党员领导干部民主生活会批评与自我批评发言
2014/09/28 职场文书
教师对照四风自我剖析材料
2014/09/30 职场文书
2014年信用社工作总结
2014/11/25 职场文书
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL