Python实现大文件分割

问题

最近处理数据,碰到有一个按行存储的文本文件,含有七百多万条数据,大小近7G,本地直接报出MemoryError,处理不了。

解决方法

用python写个脚本,将大文件拆分成小文件,对小文件进行处理,问题不就解决了么。

分割脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import os
def split(fromfile,todir,chunksize=22*10000):
if not os.path.exists(todir):#check whether todir exists or not
os.mkdir(todir)
else:
for fname in os.listdir(todir):
os.remove(os.path.join(todir,fname))
partnum = 0
inputfile = open(fromfile,'rb')#open the fromfile
while True:
partnum += 1
filename = os.path.join(todir,('part-%04d' %partnum))
fileobj = open(filename,'wb')#make partfile
linenum = 0
while( linenum<= batchSize ):
read_content = inputfile.readline()
if( read_content ):
fileobj.write(read_content)
else:
break
linenum += 1
fileobj.close()
if (linenum < batchSize): #last part file
break
return partnum

上面的脚本,就能够就将大文件,分割成小文件,且每个小文件含有220001行记录,大小约为178M,在todir目录看到分割后的文件如下:
partfile

欢迎大神,推荐更棒的方法!

分享