Скачать файл по частям в Python 3 - PullRequest
0 голосов
/ 30 октября 2011

Я использую Python 3 для загрузки файла:

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

Этот код работает, но сначала копирует весь файл в память.Это проблема с очень большими файлами, потому что моя программа становится нехваткой памяти.(Переход от 17М памяти к 240М памяти для файла 200 МБ)

Я хотел бы знать, есть ли способ в Python загрузить небольшую часть файла (пакета), записать ее в файл, стеретьиз памяти и повторяйте процесс до тех пор, пока файл не будет полностью загружен.

1 Ответ

3 голосов
/ 30 октября 2011

Попробуйте использовать метод, описанный здесь:

Ленивый метод для чтения больших файлов в 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)

Это, вероятно, будет адаптировано к вашим потребностям: он считывает файл небольшими порциями, что позволяет обрабатывать без заполнения всей вашей памяти.Вернись, если у тебя есть еще вопросы.

...