0

以下代码下载一个 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

当我尝试使用 Libre Office 打开文件“ipca_201807SerieHist.xls”(使用上述代码下载并提取)时,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”是葡萄牙语。

4

1 回答 1

0

正如 mkrieger1 所提到的,只需将最后一行更改为以下内容即可解决问题。

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

    xls_file = zipfile.read(filename)
    with open(filename, 'wb') as output:
        output.write(xls_file)
于 2018-08-28T04:49:07.577 回答