从 .zip 文件中提取信息的问题

Problems with extracting information from a `.zip` file

我在从 .zip 文件中提取信息时遇到问题。我是这样做的:

from zipfile import ZipFile

with ZipFile('https://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2015/UFs/PR/pr_municipios.zip', 'r') as zipObj:
   zipObj.extractall()

但它给出了以下错误:

----------------------------------------------------
OSError            Traceback (most recent call last)
Input In [58], in <cell line: 3>()
      1 from zipfile import ZipFile
----> 3 with ZipFile('https://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2015/UFs/PR/pr_municipios.zip', 'r') as zipObj:
      4    zipObj.extractall()

File C:\ProgramData\Anaconda3\lib\zipfile.py:1248, in ZipFile.__init__(self, file, mode, compression, allowZip64, compresslevel, strict_timestamps)
   1246 while True:
   1247     try:
-> 1248         self.fp = io.open(file, filemode)
   1249     except OSError:
   1250         if filemode in modeDict:

OSError: [Errno 22] Invalid argument: 'https://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2015/UFs/PR/pr_municipios.zip'

Zipfile 无法直接从互联网上提取文件,您必须先下载它们。您可以使用 requests 包在同一脚本中执行此操作:

import requests
from zipfile import ZipFile

req = requests.get("https://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2015/UFs/PR/pr_municipios.zip", allow_redirects=True)

with open("pr_municipios.zip", "wb") as file:
    file.write(req.content)


with ZipFile('pr_municipios.zip', 'r') as zipObj:
   zipObj.extractall()

Bruh,使用 geopandas.read_file() 它很聪明。 Documentation For Zips

import geopandas

url = "https://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2015/UFs/PR/pr_municipios.zip"

df = geopandas.read_file(url)
print(df)

输出: