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使用Socket(Https)Post登录百度的实现代码
May 18 Python
使用django-suit为django 1.7 admin后台添加模板
Nov 18 Python
Python基础教程之内置函数locals()和globals()用法分析
Mar 16 Python
Python爬虫使用脚本登录Github并查看信息
Jul 16 Python
python+selenium实现简历自动刷新的示例代码
May 20 Python
python中metaclass原理与用法详解
Jun 25 Python
Python3 itchat实现微信定时发送群消息的实例代码
Jul 12 Python
使用pytorch实现可视化中间层的结果
Dec 30 Python
使用python实现飞机大战游戏
Mar 23 Python
numpy的Fancy Indexing和array比较详解
Jun 11 Python
Ubuntu16安装Python3.9的实现步骤
Dec 15 Python
详解Python Celery和RabbitMQ实战教程
Jan 20 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解析html类库simple_html_dom(详细介绍)
2013/07/05 PHP
js代码实现微博导航栏
2015/07/30 PHP
postman的安装与使用方法(模拟Get和Post请求)
2018/08/06 PHP
Javascript 中的 && 和 || 使用小结
2010/04/25 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
js中精确计算加法和减法示例
2014/03/28 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
自动化Nginx服务器的反向代理的配置方法
2015/06/28 Python
python数字图像处理实现直方图与均衡化
2018/05/04 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
python解析多层json操作示例
2019/12/30 Python
Python运行DLL文件的方法
2020/01/17 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
python要安装在哪个盘
2020/06/15 Python
Python调用jar包方法实现过程解析
2020/08/11 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
Beach Bunny Swimwear官网:设计师泳装和性感比基尼
2019/03/13 全球购物
十佳青年事迹材料
2014/08/21 职场文书
科学发展观活动总结
2014/08/28 职场文书
2014最新离职证明范本
2014/09/12 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
党员剖析材料范文
2014/09/30 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
2015年大学宣传部工作总结
2015/05/26 职场文书
贷款收入证明范本
2015/06/12 职场文书
广播体操比赛主持词
2015/06/29 职场文书
创业计划书之面包店
2019/09/17 职场文书
用Python实现屏幕截图详解
2022/01/22 Python
python Tkinter模块使用方法详解
2022/04/07 Python