通过 URL 下载文件时 Fiona 驱动程序错误

Fiona Driver Error when downloading files via URL

这很容易测试您是否遇到错误:

import geopandas as gpd
gdf = gpd.read_file('https://hepgis.fhwa.dot.gov/fhwagis/AltFuels_Rounds1-5_2021-05-25.zip')
File "fiona/ogrext.pyx", line 540, in fiona.ogrext.Session.start
File "fiona/_shim.pyx", line 90, in fiona._shim.gdal_open_vector
fiona.errors.DriverError: '/vsimem/6101ab5f23764c15b5fe47aa52a049d6' not recognized as a supported file format.

有趣的是,我最近收到了其他 URL 的错误,并认为 URL 有问题。但是,现在我怀疑发生了其他事情,因为它发生在不止一个 URL 上。另一方面,一些 URLs 没有这个问题。另一件有趣的事情,这个错误只是有时发生。例如,如果我重新运行该命令,它可能会工作 20 次中的 1 次。

我的菲奥娜版本: 菲奥娜 1.8.20 py39hea8b339_1 conda-forge

如有任何帮助,我们将不胜感激。

经调查,URL 没有 return 压缩文件。看下面的代码,它实际上 return 是一个 HTML 输入页面...

import geopandas as gpd
import requests, io
from pathlib import Path
from zipfile import ZipFile, BadZipFile
import urllib
import fiona

url = "https://hepgis.fhwa.dot.gov/fhwagis/AltFuels_Rounds1-5_2021-05-25.zip"

try:
    gdf = gpd.read_file(url)
except Exception:
    f = Path.cwd().joinpath(urllib.parse.urlparse(url).path.split("/")[-1])

    r = requests.get(url, stream=True, headers={"User-Agent": "XY"})
    with open(f, "wb") as fd:
        for chunk in r.iter_content(chunk_size=128):
            fd.write(chunk)
    try:
        zfile = ZipFile(f)
        zfile.extractall(f.stem)
    except BadZipFile:
        with open(f) as fh:
            print(fh.read())