2015-07-19 3 views
1

У меня есть список URL-адресов, содержащих документы Word и документы PDF. Я хочу получить все эти данные и создать zip-файл, содержащий все документы, которые затем можно загрузить (создание ответа на флеш с помощью приложения/zip mime-type). У меня есть следующий код, который только возвращает 0 байт зип-файл:0 байт Zip-Archive

allLinks = [...] 
for link in allLinks: 
with zipfile.ZipFile('Documents.zip', mode='w', compression=zipfile.ZIP_DEFLATED) as zip: 
    response = requests.get(link, headers=headers, stream=True) 
    filename = urllib.parse.unquote(response.headers.get('content- disposition').replace("attachment; filename*=UTF-8",                      "").replace("''", "").encode('latin-1').decode('utf-8')) 
if response.status_code == 200: 
    zip.writestr(filename, response.content)  
return zip 

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

ответ

1

Вы переписываете каждое итерационное pening с mode='w', так что если последний URL не возвращает 200, вы получаете пустой почтовый файл, лучше всего вы получите последний zip.writestr.

Открыть вне цикла:

allLinks = [...] 
with zipfile.ZipFile('Documents.zip', mode='w', compression=zipfile.ZIP_DEFLATED) as zp: 
    for link in allLinks: 
+0

Спасибо. Но я все равно получаю 0-байтовый архив. Кажется, что все ссылки не загружены, а документы заархивированы. Если мне повезет, ему удастся закрепить только один документ из всех ссылок. – fae53351b9effc708e764e871bef31

Смежные вопросы