智能摘要 AI
下载ERA5-Land相关nc格式数据后,尝试解析时出现错误,提示未找到匹配的IO引擎。经检查发现文件为压缩包而非预期的nc文件。通过编写解压函数`auto_unzip_if_needed`,自动解压并返回解压后的nc文件路径。具体步骤包括:创建客户端下载示例数据,确认文件类型为压缩包,使用Python内置库解压文件,并验证解压成功。最终问题得以解决,可以继续构建数据集。
详情
在下载ERA5-Land相关nc格式数据后,无法对nc数据进行解析,报错详情如下:
Traceback (most recent call last):
File "/workspace/test/test.py", line 4, in <module>
ds = xr.open_dataset("output.nc")
File "/root/miniforge3/lib/python3.10/site-packages/xarray/backends/api.py", line 668, in open_dataset
engine = plugins.guess_engine(filename_or_obj)
File "/root/miniforge3/lib/python3.10/site-packages/xarray/backends/plugins.py", line 194, in guess_engine
raise ValueError(error_msg)
ValueError: did not find a match in any of xarray's currently installed IO backends ['netcdf4', 'h5netcdf', 'scipy', 'zarr']. Consider explicitly selecting one of the installed engines via the ``engine`` parameter, or installing additional IO dependencies, see:
https://docs.xarray.dev/en/stable/getting-started-guide/installing.html
https://docs.xarray.dev/en/stable/user-guide/io.html解决
首先创建一个默认client下载示例数据:
import cdsapi
c = cdsapi.Client()
c.retrieve(
'reanalysis-era5-land',
{
'variable': [
'2m_temperature', 'total_precipitation'
],
'year': '2022',
'month': '08',
'day': '01',
'time': [
'00:00', '06:00', '12:00', '18:00',
],
'area': [40.5, 115.7, 39.4, 117.4],
'format': 'netcdf',
})
下载完成后,输出文件为output.nc,使用xr.open_dataset进行校验,发生错误。环境检测没有问题,对文件进行检测,使用file命令,得到以下输出
(base) root@VM-7-194-ubuntu:/workspace/test# file output.nc
output.nc: Zip archive data, at least v2.0 to extract(ÒωÓױ)!居然是压缩文档,貌似只有reanalysis-era5-land这个下载下来不是nc文件,官方也搁这儿套壳。让AI写个解压命令:
import zipfile
import os
def auto_unzip_if_needed(nc_path, out_dir=None):
if out_dir is None:
out_dir = os.path.dirname(nc_path)
if zipfile.is_zipfile(nc_path):
with zipfile.ZipFile(nc_path, 'r') as zip_ref:
zip_ref.extractall(out_dir)
print(f'已自动解压: {nc_path}')
# 返回解压后的nc文件路径
for fname in zip_ref.namelist():
if fname.endswith('.nc'):
return os.path.join(out_dir, fname)
return nc_pathOK,问题解决,接着构建数据集!





评论 (0)