我正在使用Python 3下载文件:
local_file = open(file_name, "w" + file_mode)
local_file.write(f.read())
local_file.close()
此代码有效,但它首先将整个文件复制到内存中。这是一个非常大的文件的问题,因为我的程序变得内存饥饿。 (对于200 MB文件,从17M内存转到240M内存)
我想知道在Python中是否有办法下载文件(数据包)的一小部分,将其写入文件,从内存中删除,并继续重复该过程,直到文件完全下载。< / p>
答案 0 :(得分:3)
尝试使用此处描述的方法:
Lazy Method for Reading Big File in Python?
我具体指的是接受的答案。我也请在此复制,以确保完整清晰的回复。
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)
这可能会适应您的需求:它以较小的块读取文件,允许在不填满整个内存的情况下进行处理。如果您有任何其他问题,请回来。