Сохранить API-ответ Unicode в ZIP-файл Python - PullRequest
0 голосов
/ 11 марта 2019

Когда я нажимаю post API, он возвращает содержимое файла zip в качестве вывода (в форме Юникода), и я хочу сохранить это содержимое локально в zipfile.

Как я могу сохранить то же самое?

Trials :

Попробуйте 1:

`//variable data containing API response. (i.e data = response.text)
f = open('test.zip', 'wb')
f.write(data.encode('utf8'))
f.close()`

Над кодом, создающим zip-файл.Но файл поврежден один.

Попробуйте 2

with zipfile.ZipFile('spam.zip', 'w') as myzip: myzip.write(data.decode("utf8"))

Приведенный выше код дает мне ошибку: UnicodeEncodeError: 'ascii' codec can't encode character u'\ufffd' in position 97: ordinal not in range(128)

Может кто-нибудь помочь мне решить то же самое?

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Я нашел ответ на вышеуказанную проблему.Может быть, кто-то в будущем хочет того же.Поэтому написание ответа на мой собственный вопрос.

response.content вместо response.text решило мою проблему.

import requests
response = requests.request("POST", <<url>>, <<payload>>, <<headers>>, verify=False)
data = response.content

f = open('test.zip', 'w')
f.write(data)
f.close()
0 голосов
/ 11 марта 2019

при чтении и записи двоичных данных обязательно откройте ваши файлы в двоичном режиме:

f = open('test.zip', 'w')

должно быть

f = open('test.zip', 'wb')

что вы подразумеваете под "испорченным", вы не можетеоткрыть его с помощью zip-менеджера?поскольку созданный здесь файл на самом деле не является zip-файлом



при чтении документации zipfile, я вижу, что write принимает имя файла, оно не сжимает произвольные данные, вы можете использовать zlib длячто
вы также можете использовать функцию writestr в zipfile, но тогда вам нужно указать имя файла, под которым ваша строка будет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...