在Python 3中分段下载文件
我正在使用Python 3来下载一个文件:
local_file = open(file_name, "w" + file_mode)
local_file.write(f.read())
local_file.close()
这段代码可以正常工作,但它会先把整个文件都加载到内存中。这对于非常大的文件来说就成了问题,因为我的程序会消耗大量内存。(比如下载一个200MB的文件时,内存从17MB飙升到240MB)
我想知道在Python中有没有办法下载文件的一小部分(数据包),把它写入文件,然后从内存中删除这部分,再重复这个过程,直到文件完全下载完。
1 个回答
3
试试这里提到的方法:
我特别指的是被接受的答案。为了让你更清楚,我把它也复制过来。
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)
这个方法可能会适合你的需求:它会把文件分成小块来读取,这样就可以处理文件而不会占满你的内存。如果你还有其他问题,随时回来问我。