读取压缩二进制文件 (.grib2.bz2)

Read compressed binary file (.grib2.bz2)

我已经从这个列表中下载了一个文件 https://opendata.dwd.de/weather/nwp/icon-eu/grib/03/t_2m/(实际文件名每天都在变化),这些文件是 bz2 压缩的。

我可以使用例如

读取解压后的文件
import xarray as xr
# cfgrib + dependencies are also required
grib1 = xr.open_dataset("icon-eu_europe_regular-lat-lon_single-level_2020101212_001_ASHFL_S.grib2", engine='cfgrib')

但是,我想在压缩文件中阅读。

我试过

with bz2.open("icon-eu_europe_regular-lat-lon_single-level_2020101818_002_ASWDIFD_S.grib2.bz2", "rb") as f:
    xr.open_dataset(f, engine='cfgrib')

但这不起作用。

我正在寻找以编程方式读取压缩文件的方法。

我在处理数值天气预报数据时遇到了同样的问题。

我在这里做的是下载文件并将其保存为二进制对象(例如 urlopenrequests)。将此对象传递给以下函数:

import bz2, shutil
from io import BytesIO
from pathlib import Path


def bunzip_store(file: BytesIO, local_intermediate_file: Path):
    with bz2.BZ2File(file) as fr, local_intermediate_file.open(mode="wb") as fw:
        shutil.copyfileobj(fr, fw)

一个解压缩的文件将存储在local_intermediate_file下。现在你应该可以打开这个文件了。