【问题标题】:Read NetCDF file from Azure file storage从 Azure 文件存储读取 NetCDF 文件
【发布时间】:2023-03-18 05:44:01
【问题描述】:

我已将文件上传到我的 Azure 文件存储帐户并创建了 SAS(共享访问签名)。让我们假设有问题的文件名为fileA.nc

现在,使用 Python3,我正在尝试阅读 fileA.nc

from netCDF4 import Dataset

url ='https://<my-azure-resource-group>.file.core.windows.net/<some-file-share>/fileA.nc<SAS-token>';
dataset = Dataset(url)

print(dataset.variables.keys())

上面的代码不起作用,而是给我以下错误:

Traceback(最近一次调用最后一次):文件“yadaYadaYada/test.py”,行 8、在 dataset = Dataset(url) 文件“netCDF4/_netCDF4.pyx”,第 1848 行,在 netCDF4._netCDF4.Dataset.init (netCDF4/_netCDF4.c:13983) OSError: NetCDF: Malformed or unexpected Constraint

这是line 8

 dataset = Dataset(url)

我知道提供的 URL 有效。如果我将其粘贴到浏览器中,文件会下载...

我查看了netCDF4 documentation,上面写着:

可以访问远程 OPeNDAP 托管的数据集以进行读取 http 如果向 Dataset 构造函数提供 URL 而不是文件名。 但是,这需要使用 OPenDAP 构建 netCDF 库 支持,通过 --enable-dap 配置选项(在版本中添加 4.0.1)。

但是,我不知道如何判断 Pycharms 安装 netcdf4 时是否使用了--enable-dap argument,但我无法想象为什么它不会。此外,如果我坚持一个指向某个 HTML 的 url,我会在错误转储中获得 HTML,因此我认为 netcdf4 实际上是在尝试加载远程数据集,所以问题出在其他地方。

我真的很感谢这里的一些帮助。也许有人知道另一个允许我从 Azure 加载数据集的 Python 3 netCDF 库?

更新

好的,我现在可以confirm 知道 python netcdf4 库确实启用了 --OPenDAP:

您好,支持 OpenDAP 的 netCDF4 1.0.4 现已推出 Unix 上的 conda 存储库。安装:$ conda install netcdf4

  • 宜兰

【问题讨论】:

  • 嗨,我不确定这里与 OpenDAP 有什么关系?我没有使用过 Azure 存储,但我非常怀疑它是否会自动提供 OpenDAP 支持。而且,如果Azure允许直接打开文件,那么你也可以打开你的NetCDF文件,但如果它类似于AWS-s S3,那么你基本上应该先下载文件到本地磁盘然后打开。

标签: python-3.x azure netcdf


【解决方案1】:

我找到了解决办法。事实证明,您无法直接从 Azure 文件共享中读取,即使您将链接粘贴到浏览器中的文件时,该文件也会开始下载。

我需要做的是在我的操作系统上安装文件共享。就我而言,我使用的是 Windows,但这也可以在 Linux 上完成。下面的代码应该做相应的修改,然后放入命令提示符中:

net use <drive-letter>: \\<storage-account-name>.file.core.windows.net\<share-name>

example :
net use z: \\samples.file.core.windows.net\logs

安装文件共享后,您可以像从外部硬盘一样读取它。您可能需要添加权限,但我没有。

这里是安装文件共享的文档链接:Documentation

【讨论】:

    猜你喜欢
    • 2012-06-16
    • 1970-01-01
    • 2021-04-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2019-08-03
    • 2021-10-31
    相关资源
    最近更新 更多