大文本文件有时在阅读时加载缓慢(尤其是日志文件),或被程序读取时容易出错。参考百度搜索得到的各种文本切割实用软件,往往不支持多文件或切割速度较慢,且无法满足用户自定义的需求。考虑编程实现,利用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()