在Python中加载15GB文件
我有一个15GB的文本文件,里面有25000行数据。 我正在用Python创建一个多层字典,格式是: dict1 = {'':int}, dict2 = {'':dict1}。
我需要在我的程序中多次使用这个dict2(大约1000次...在一个循环里)。 有没有人能告诉我一个好的方法来做到这一点?
文件中存储的是相同类型的信息 (25000张图片的不同RGB值的计数。每行一张图片) 例如:文件中的一行可能是这样的: image1 : 255,255,255-70 ; 234,221,231-40 ; 112,13,19-28 ; image2 : 5,25,25-30 ; 34,15,61-20 ; 102,103,109-228 ; 以此类推。
2 个回答
1
在Python中,如果你把文件对象当作一个迭代器使用,就可以一行一行地读取文件,而不需要把整个文件都加载到内存里。
for line in open("huge_file.txt"):
do_something_with(line)
2
最好的方法是使用分块处理。
def read_in_chunks(file_object, chunk_size=1024):
"""Lazy function (generator) to read a file piece by piece.
Default chunk size: 1k."""
while True:
data = file_object.read(chunk_size)
if not data:
break
yield data
f = open('really_big_file.dat')
for piece in read_in_chunks(f):
process_data(piece)
需要注意的是,当你开始处理大文件时,使用一种叫做“映射-归约”的方法可能会有所帮助,因为这样你可以独立处理分块后的文件,而不需要把整个数据集都加载到内存中。