Не удается открыть файл, который был загружен, разархивирован и сохранен в python3 - PullRequest
0 голосов
/ 27 августа 2018

Следующий код загружает zip-файл и сохраняет содержащийся в нем архив; не выдает сообщение об ошибке.

from io import BytesIO
import zipfile as zf
from urllib.request import urlopen

import pickle as pc  # file manager
resp = urlopen('ftp://ftp.ibge.gov.br/Precos_Indices_de_Precos_ao_Consumidor/IPCA/Serie_Historica/ipca_SerieHist.zip')
zipfile = zf.ZipFile(BytesIO(resp.read()))

zipped_filenames = zipfile.namelist()
for filename in zipped_filenames:
    print('Filename: ', filename)

    xls_file = zipfile.read(filename)
    with open(filename, 'wb') as output:
        pc.dump(xls_file, output, pc.HIGHEST_PROTOCOL)

Выход:

Filename:  ipca_201807SerieHist.xls

Когда я пытался открыть файл 'ipca_201807SerieHist.xls' (загруженный и извлеченный с помощью приведенного выше кода) в Libre Office, LO не распознает файл и пытается импортировать его.

Если я зайду по URL-адресу: ' ftp: //ftp.ibge.gov.br/Precos_Indices_de_Precos_ao_Consumidor/IPCA/Serie_Historica/ipca_SerieHist.zip', сохраните файл 'ipca_SerieHist.zip. HD, а затем извлеките и откройте файл 'ipca_201807SerieHist.xls', Libre Office распознает файл.

Оба файла 'ipca_201807SerieHist.xls' имеют одинаковые размеры; загруженный файл немного больше 62994 байт против 62976 байт. Если я сравниваю содержимое, за исключением некоторых отдельных символов, они кажутся довольно похожими.

Примечание. Файл ipca_201807SerieHist.xls написан на португальском языке.

1 Ответ

0 голосов
/ 28 августа 2018

Как упомянул mkrieger1, просто изменив самую последнюю строку на следующую, мы решили проблему.

for filename in zipped_filenames:
    print('Filename: ', filename)

    xls_file = zipfile.read(filename)
    with open(filename, 'wb') as output:
        output.write(xls_file)
...