在Python 3中分段下载文件

0 投票
1 回答
703 浏览
提问于 2025-04-17 05:17

我正在使用Python 3来下载一个文件:

local_file = open(file_name, "w" + file_mode)
local_file.write(f.read())
local_file.close()

这段代码可以正常工作,但它会先把整个文件都加载到内存中。这对于非常大的文件来说就成了问题,因为我的程序会消耗大量内存。(比如下载一个200MB的文件时,内存从17MB飙升到240MB)

我想知道在Python中有没有办法下载文件的一小部分(数据包),把它写入文件,然后从内存中删除这部分,再重复这个过程,直到文件完全下载完。

1 个回答

3

试试这里提到的方法:

在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)

这个方法可能会适合你的需求:它会把文件分成小块来读取,这样就可以处理文件而不会占满你的内存。如果你还有其他问题,随时回来问我。

撰写回答