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

作者:Jepson2017 时间:2022-02-18 12:36:06 

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

方法一:

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中是完整的记录,判断方法见代码

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

方法三:基于大小分割


# -*- 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

标签:python,文件,分割
0
投稿

猜你喜欢

  • 用户如何有效地利用ORACLE数据字典

    2008-03-04 18:19:00
  • 如何判断发言是否为空?

    2010-01-12 20:15:00
  • 用JMail、CDONTS发送邮件asp源码

    2007-09-24 15:58:00
  • 如何在ACCESS中插入超级链接?

    2007-10-22 12:13:00
  • opencv python 基于KNN的手写体识别的实例

    2021-02-22 13:03:02
  • asp 删除数据库记录的代码

    2011-02-05 10:39:00
  • css实现图片倒影效果

    2007-11-05 18:29:00
  • Python : turtle色彩控制实例详解

    2022-09-22 13:01:46
  • GOOGLE LOGO 设计演化过程

    2008-02-13 19:41:00
  • 基于jQuery实现的立体文字渐变效果

    2009-05-18 19:15:00
  • MYSQL的DATE_FORMAT()格式化日期

    2009-02-27 16:04:00
  • python点云地面点滤波(Progressive Morphological Filter)算法介绍(PCL库)

    2021-12-23 00:38:29
  • Python利用pygame模块制作代码雨

    2021-02-13 02:53:24
  • python转换字符串为摩尔斯电码的方法

    2022-01-01 10:17:44
  • Anaconda超详细保姆级安装配置教程

    2022-09-06 08:11:50
  • Python threading.local代码实例及原理解析

    2021-09-03 06:14:07
  • python GUI计算器的实现

    2021-11-30 01:00:53
  • 一个js自动完成功能源码

    2011-06-06 07:42:00
  • 二级域名的解析指向ASP源码

    2007-10-19 19:13:00
  • 在ASP中使用SQL语句之4:联合语句

    2007-08-11 12:34:00
  • asp之家 网络编程 m.aspxhome.com