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中去空格函数的用法
Aug 21 Python
基于Python __dict__与dir()的区别详解
Oct 30 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
Nov 29 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
Dec 26 Python
python列表,字典,元组简单用法示例
Jul 11 Python
django项目用higcharts统计最近七天文章点击量
Aug 17 Python
Python绘制热力图示例
Sep 27 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
Oct 14 Python
Python获取统计自己的qq群成员信息的方法
Nov 15 Python
Python selenium自动化测试模型图解
Apr 15 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
May 25 Python
python如何查看网页代码
Jun 07 Python
Python绘制分类图的方法
Pytest allure 命令行参数的使用
在pyCharm中下载第三方库的方法
Python控制台输出俄罗斯方块移动和旋转功能
Apr 18 #Python
深入理解python多线程编程
Apr 18 #Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 18 #Python
python批量更改目录名/文件名的方法
Apr 18 #Python
You might like
通过ODBC连接的SQL SERVER实例
2006/10/09 PHP
PHP会话处理的10个函数
2015/08/11 PHP
JS Excel读取和写入操作(模板操作)实现代码
2010/04/11 Javascript
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
JS原型链怎么理解
2016/06/27 Javascript
原生js实现节日时间倒计时功能
2017/01/18 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
微信小程序的日期选择器的实例详解
2017/09/29 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
2019/11/25 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
原生JS实现相邻月份日历
2020/10/13 Javascript
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
[20:21]《一刀刀一天》第十六期:TI国际邀请赛正式打响,总奖金超过550万
2014/05/23 DOTA
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
2013/12/08 Python
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
python中的split()函数和os.path.split()函数使用详解
2019/12/21 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
美国在线购物频道:Shop LC
2019/04/21 全球购物
类和结构的区别
2012/08/15 面试题
机械电子工程专业推荐信范文
2013/11/20 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
JavaScript继承的三种方法实例
2021/05/12 Javascript