6

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

4

4 回答 4

7

@miraculixx的答案是正确的,但它假设您已经安装了CDF C Library

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

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

您可以在此链接中找到最新的稳定版本。使用 获取源代码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 的工具包程序(这就是我们libncurses5-dev在步骤 2 中安装依赖项的原因)。因此,这是最终的 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,而是覆盖它。修复很简单,将第 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. 一切准备就绪,去做好事:

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

from spacepy import pycdf
cdf = pycdf.CDF('/path/to/file.cdf')
print(cdf)
于 2017-04-20T22:49:05.937 回答
3

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

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

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

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

from spacepy import pycdf
cdf = pycdf.CDF('/path/to/file.cdf')
print(cdf)
于 2016-05-14T21:34:27.077 回答
3

前段时间我有同样的问题。我假设,你在 Windows 上工作......

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

首先,SpacePy 官方只支持 32 位的 python 版本,因此你必须有 323 位的 python。

其次,它需要在您的系统中安装 NASA CDF 库(也是 32 位版本)。你可以从 这里抓住它。

第三步处理 Spacepy 依赖:

  • 麻木的
  • scipy
  • matplotlib
  • h5py
  • 网络x
  • 网络

它们中的大多数是 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模块访问它。

于 2016-10-27T14:19:24.223 回答
0

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

pip install cdflib

在您的代码中:

import cdflib

cdf_file = cdflib.CDF('/path/to/cdf_file.cdf')
于 2019-09-30T11:55:21.607 回答