读取压缩的二进制文件.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')

但这不起作用。

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

解决方法

看看GribMagic,我想在这里开发一个通用的天气预报下载器。它实际上正在进行中,希望您有兴趣来做。

-

我在这里要做的是下载文件并将其作为二进制对象保存(例如,使用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下。现在您应该可以打开该文件了。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...