Итак, как мы обсуждали в комментариях, вы не можете действительно делать то, что вы пытаетесь сделать. Однако есть пара идей, которые могут вам помочь.
Вариант 1
Если вы знаете размер файла, который вы пытаетесь загрузить, вы можете создать файл изнеобходимого размера и перезаписать загружаемыми байтами.
with open("some_file_name", "wb") as f:
f.truncate(some_size)
или
with open("some_file_name", "wb") as f:
f.seek(some_size - 1)
f.write('\0')
Обратите внимание, что если указанный размер превышает текущий размер файла, результатом будет платформа-в зависимости: возможны следующие варианты: файл может оставаться неизменным, увеличиваться до указанного размера, как если бы он был заполнен нулями, или увеличиваться до указанного размера с неопределенным новым содержимым.
, поэтому при загрузке частей можно перезаписыватьопределенный кусок байтов с
with open("some_file_name", "r+b") as f:
f.seek(offset)
f.write(data_chunk)
Вариант 2
Решено, сколько памяти вы готовы использовать, и загружать только определенное количество деталей по порядку за раз.
пример: если вы решили, что хотите использовать только 1 ГБ и хотите загрузить большой файл кусками по 250 МБ
- Начните загружать первые 4 блока параллельно.
- Когда блок 1 завершает загрузку, вы можете записать его на диск и начать загрузку фрагмента 5.
- , если блок завершает загрузку до того, как младший блок (например, 2 заканчивает до 1), удерживает его в памяти до следующего блокаотделка
- это ограничивает использование памяти до 1 ГБ, поскольку не более четырех блоков по 250 МБ загружаются одновременно
Опция 3
запись во временные файлы (каквы упомянули в исходном вопросе), но храните их в месте, где пользователь, вероятно, их не увидит, например, во временном каталоге вашей системы или в скрытом каталоге, созданном вашей программой