Как добавить текстовый файл в ZIP-файл, созданный из запроса запросов в Python? - PullRequest
0 голосов
/ 13 февраля 2019

Я сделал запрос и смог получить доступ и сохранить заархивированный файл, загруженный со страницы.Заархивированный файл содержит несколько текстовых файлов, таких как text1.txt, text2.txt и т. Д.

import requests

r = requests.get('http://somewhere.com/download.zip', stream=True)

handle = open('store_locally.zip', "wb")

for chunk in r.iter_content(chunk_size=512):
    handle.write(chunk)
handle.close

Однако я хотел бы добавить дополнительный текстовый файл с именем lastupdated.txt.Код как:

import requests

r = requests.get('http://somewhere.com/download.zip', stream=True)

handle = open('store_locally.zip', "wb")

for chunk in r.iter_content(chunk_size=512):
    handle.write(chunk)

f=open("lastupdated.txt","w+")
f.write('2019-02-12')
handle.write(f)

handle.close

Это дало мне ошибку ниже:

Traceback (most recent call last):
  File "C:\Users\main.py", line 55, in <module>
    handle.write(f)
TypeError: a bytes-like object is required, not '_io.TextIOWrapper'

Он создает файл lastupdated.txt в том же каталоге main.py, но это не то, чтоЯ хочу, я бы хотел, чтобы он был создан в архивном файле.

1 Ответ

0 голосов
/ 13 февраля 2019

Проблема в том, что вы просто открываете новый файл (lastupdated.txt) и записываете в него, он не имеет отношения к почтовому индексу.После того, как вы запишите zip на диск и закроете его, вы можете использовать модуль zipfile, чтобы добавить в него новый файл:

import zipfile

import requests

outfile = "stored_locally.zip"
r = requests.get("http://somewhere.com/download.zip", stream=True)

with open(outfile, "wb") as fd:
    for chunk in r.iter_content(2048):
        fd.write(chunk)

with zipfile.ZipFile(outfile, "a") as z:
    z.writestr("lastupdated.txt", "2019-02-12")

Редактировать: загрузка и изменение файла в памяти без записи на диск:

import zipfile
from io import BytesIO

import requests

r = requests.get("http://somewhere.com/download.zip")
f = BytesIO(r.content)

with zipfile.ZipFile(f, "a") as z:
    z.writestr("lastupdated.txt", "2019-02-12")
...