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中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
对于Python的框架中一些会话程序的管理
Apr 20 Python
详解Python验证码识别
Jan 25 Python
Python实现的文本简单可逆加密算法示例
May 18 Python
Python使用zip合并相邻列表项的方法示例
Mar 17 Python
python中pylint使用方法(pylint代码检查)
Apr 06 Python
django开发post接口简单案例,获取参数值的方法
Dec 11 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
Aug 06 Python
python怎么对数字进行过滤
Jul 05 Python
Python基于xlutils修改表格内容过程解析
Jul 28 Python
Python基础之操作MySQL数据库
May 06 Python
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
May 17 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作为Shell脚本语言使用
2006/10/09 PHP
PHP生成静态页面详解
2006/11/19 PHP
PHP的开发框架的现状和展望
2007/03/16 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
PHP实现AES256加密算法实例
2014/09/22 PHP
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
checkbox使用示例
2013/08/23 Javascript
Json和Jsonp理论实例代码详解
2013/11/15 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
强大的 Angular 表单验证功能详细介绍
2017/05/23 Javascript
利用require.js与angular搭建spa应用的方法实例
2017/07/19 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
vue element实现表格合并行数据
2020/11/30 Vue.js
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
python实现五子棋人机对战游戏
2020/03/25 Python
关于python中密码加盐的学习体会小结
2019/07/15 Python
python的re模块使用方法详解
2019/07/26 Python
把django中admin后台界面的英文修改为中文显示的方法
2019/07/26 Python
英国珠宝钟表和家居礼品精品店:David Shuttle
2018/02/24 全球购物
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
信息专业大学生自我评价分享
2014/01/17 职场文书
大二自我鉴定
2014/01/31 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
OpenCV全景图像拼接的实现示例
2021/06/05 Python
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python