大文本文件有时在阅读时加载缓慢(尤其是日志文件),或被程序读取时容易出错。参考百度搜索得到的各种文本切割实用软件,往往不支持多文件或切割速度较慢,且无法满足用户自定义的需求。考虑编程实现,利用Python编程语言可以快捷地完成将大文本文件分割成多个小文件,并且拥有非常快的速度。

一、按照大小分割,例如大文件分割成每80KB一个小文件。

Python 代码实现:

# -*- coding: utf-8 -*-

#按照大小分割文件

import os

filename = "n (2).txt"#需要进行分割的文件,请修改文件名
size = 80000 #分割大小约80K

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)

要实现文件夹内文件批量分割,可以利用循环语句。

如果你的文件夹里的文件有这样规律的命名,要一次性将他们分割。

非常容易完成这一操作,只需要简单修改代码,如下参考,你可以根据你的文件名再做修改。

# -*- coding: utf-8 -*-

#这种方法是按照大小分割文件,会存在同一行被分割在两个文件中的情况

import os
num = 1
for num in range(1,928):
    filename = 'n ('+ str(num) + ').txt'#需要进行分割的文件
    size = 81000 #分割大小80K

    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)
        num = num + 1

 

二、按照行数量分割。

1.读取文章所有的行,并存入列表中
2.定义分割成的小文本的行数
3.将原文本内容按一定行数依次写入小文件中
4.此方法对较小的大文件比较适合

#coding:utf-8
#将大文本文件分割成多个小文本文件
import os

sourceFileName = "wm.txt" #定义要分割的文件
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()

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐