【问题标题】:How read Common Data Format (CDF) in Python如何在 Python 中读取通用数据格式 (CDF)
【发布时间】:2016-05-14 21:22:03
【问题描述】:

我需要使用 python 读取 CDF 文件。我找到了库,但我不明白如何使用它。例如在这个(Python lib),我需要下载CDF lib,我不知道在哪里下载。 CDF 有下载页面,但似乎与该库无关。

【问题讨论】:

  • 正在寻找此页面:pythonhosted.org/CDF/getting.html?
  • @AndreHolzner,我没看到。我怎样才能安装这个鸡蛋文件?
  • @seleucia - 如果您的问题得到解决,您应该考虑接受答案。

标签: python io dataformat common-data-format


【解决方案1】:

@miraculixx 的answer 是正确的,但它假定您已经安装了CDF C Library

如果您在 SO 上找到此问题之前甚至不知道 CDF 文件格式是什么,这里有一个易于遵循的指南。

1.下载最新版本的 CDF C 库:

您可以在link 找到最新的稳定版本。使用wget 获取源代码,然后提取它。 注意:下面会在当前文件夹./创建一个目录,如果你想在不同的路径下载代码,请务必更改下面的代码。

wget -r -l1 -np -nd -nc http://cdaweb.gsfc.nasa.gov/pub/software/cdf/dist/latest-release/linux/ -A cdf*-dist-all.tar.gz
tar xf cdf*-dist-all.tar.gz -C ./
cd cdf*dist

2。安装所有依赖项:

SpacePy 和 CDF 库有几个依赖项(正如@Michal Dyzma 所指出的)。您可以使用condapipapt 安装它们。

pip install numpy scipy h5py matplotlib networkx
apt install build-essential gfortran libncurses5-dev

3.编译 C 库:

您应该已经下载了一个README.install 文件,其中包含的有关此步骤的详细信息比我提供的要多得多。两分钱是您要检查哪些编译变量对于您的系统和需求是必需/可选的。

make all.help

我将使用 GNU C 编译器为 Linux 构建发行版。我对 FORTRAN 界面不感兴趣,我的操作系统支持可共享库。我想安装允许使用基于命令行的交互式 CDF 工具的基于 Curses 的工具包程序(这就是我们在步骤 2 中安装 libncurses5-dev 依赖项的原因)。因此,这是最终的 make 命令:

make OS=linux ENV=gnu CURSES=yes FORTRAN=no UCOPTIONS=-O2 SHARED=yes -j4 all
make install #no sudo

安装应该运行顺利并添加./bin./include./lib子目录中的所有文件。

4.设置环境变量:

./bin 中应该有一个名为 definitions.B 的文件,它会自动为您执行此操作,使用 chmod+x 使其可执行,然后将以下行添加到您的 ~/.bashrc注意: 1)我假设您将库安装在路径$HOME/Libraries/; 2).后面有个空格):

. $HOME/Libraries/cdf/cdf36_3-dist/bin/definitions.B

重要提示: 上面的文件在 第 68 行 有一个错误,而不是附加到环境变量 LD_LIBRARY_PATH 它会覆盖它。修复很简单,将 line 68 替换为以下内容:

export LD_LIBRARY_PATH=$HOME/Libraries/cdf/cdf36_3-dist/lib:$LD_LIBRARY_PATH

如果由于某种原因definitions.B 不存在,只需添加以下内容:

export CDF_BASE=$HOME/Libraries/cdf/cdf36_3-dist
export CDF_INC=$CDF_BASE/include
export CDF_LIB=$CDF_BASE/lib
export CDF_BIN=$CDF_BASE/bin
export LD_LIBRARY_PATH=$CDF_BASE/lib:$LD_LIBRARY_PATH

5.你都准备好了,去做好事吧:

假设您使用 pip 安装了spacepy,以下内容应该可以立即使用:

from spacepy import pycdf
cdf = pycdf.CDF('/path/to/file.cdf')
print(cdf)

【讨论】:

  • 非常有帮助。但是 NASA 真的没有为常见的打包系统(Ubuntu/Debian、RPM 等)提供软件包吗?严重地?要求最终用户进行这种手动构建软件包,而不是使用将安全问题升级和错误修复集成到标准升级机制中的软件包管理系统,是危险的,也是很大的负担。还是我缺少关于典型用户的一些基本信息?
  • 工作就像一个魅力!很好的解释。我很惊讶在谷歌搜索示例 cdf 文件时没有看到有用的结果,但最终在发行版本身中找到了几个,例如在cdf36_3-dist/samples/cacsst2.cdf
【解决方案2】:

如果你安装了Python的打包工具pip,你可以得到spacepy cdf库如下:

$ pip install git+https://github.com/spacepy/spacepy.git

请注意,这将安装很多依赖项,包括 numpy 和 scipy。从头开始安装这些可能有点困难。你可能想先安装一个现成的包,例如anaconda。完成后,只需使用上面的命令,spacepy 就可以轻而易举地安装了。

一旦spacepy安装成功,根据example它应该像这样工作:

from spacepy import pycdf
cdf = pycdf.CDF('/path/to/file.cdf')
print(cdf)

【讨论】:

  • 在安装过程中出现此错误:扩展 'ffnet.fortran._ffnet' 有 Fortran 源,但未找到 Fortran 编译器
  • 你安装了anaconda吗?
  • 是的,我正在使用 anaconda。
  • 显然您的系统缺少 fortran 编译器 - this might help。我开始怀疑,除了 CDF 部分,你还需要 spacepy 的其他功能吗?
  • 我已安装,但现在又出现另一个错误:异常:无法从 .Try os.environ["CDF_LIB"] = library_directory 加载 CDF C 库。 .我试图设置 library_directory 但我不知道它在哪里?
【解决方案3】:

之前我也有同样的问题。我假设,你在 Windows 上工作......

根据 Spacepy 文档,您需要几个依赖项才能使用其 cdf 模块。

首先 SpacePy官方只支持32位的python版本,所以你得有323位的python。

第二,它需要在您的系统中安装 NASA CDF 库(也是 32 位版本)。你可以从 here.

第三继续 Spacepy 依赖:

  • numpy
  • scipy
  • matplotlib
  • h5py
  • 网络x
  • ffnet

其中大部分是 Anaconda 捆绑包的一部分。如果不是,您必须简单地安装它们pip install <package name>

如果您在从源代码编译时遇到问题,我建议您访问 Christoph Gohlke 网站并获取与您的 python 版本匹配的 Windows 预构建二进制文件。 http://www.lfd.uci.edu/~gohlke/pythonlibs/

这应该让你开始使用 Spacepy CDF 模块。

您也可以尝试其他方法。从 NASA 页面下载 CDF-to-netCDF 转换器并在您的 CDF 文件上运行它。

Python 有很好的 netCDF 模块,可以从 GitHub 或 python repo 安装。在这种情况下,您还需要几个依赖项,例如 HDF5、netCDF-4、numpy、cython。

拥有 netCDF 文件后,您可以使用 netCDF 模块或scipy.io 模块访问它。

【讨论】:

    【解决方案4】:

    Maven 的 CDFLib 是纯 Python 替代品。 https://github.com/MAVENSDC/cdflib

    pip install cdflib

    在您的代码中:

    import cdflib
    
    cdf_file = cdflib.CDF('/path/to/cdf_file.cdf')
    

    【讨论】:

    • 你也可以用这个库写CDF文件。
    • 您好!我一直在尝试使用 cdflib,我想查看文件的内容,但不知道怎么做。你能提供一行代码来帮助我吗?谢谢!
    猜你喜欢
    • 2016-04-12
    • 1970-01-01
    • 2014-08-25
    • 2011-04-03
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    相关资源
    最近更新 更多