Перебирайте отдельные байты, а затем сохраняйте их в файл без изменения содержимого

У меня есть байтовая строка, возвращенная из API, и я сохраняю ее в response.content

С небольшим содержанием я могу без проблем сохранить его в файл, используя следующий код

      with open(save_path, 'wb') as save_file:
    save_file.write(response.content)

Но для файла большего размера это вызовет ошибку памяти, поэтому я попытался не читать содержимое сразу, используя этот код

      with open(save_path, 'wb') as save_file:
    for x in response.content: 
        save_file.write(bytes(x)) #the x from iteration seem to be converted to int so I convert it back

Но приведенный выше метод, похоже, меняет содержимое, потому что он больше не совместим с другой библиотекой (в моем случае, когда Ласпи пытается прочитать сохраненный файл, laspy.util.LaspyException: Invalid format: h0.0 появляется ошибка)

Как я могу это сделать?

1 ответ

Решение

Я вижу вашу проблему с использованием bytes(x). измените это на x.to_bytes(1, 'big') реши твою проблему

Используйте приведенный ниже код, чтобы узнать, какая разница

      a = b'\xcf\x84o\xcf\x81\xce\xbdo\xcf\x82'
a.decode('utf-8') # τoρνoς

with open('./save.txt', 'wb') as save_file:
    for i in a:
        print(i.to_bytes(1, 'big')) # write it to file, not the others
        print(i)
        print(bytes(i))
        print('----')

Другие вопросы по тегам