如何阅读 Python 中的通用数据格式 (CDF)

How read Common Data Format (CDF) in Python

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

如果你安装了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)

前一段时间我遇到了同样的问题。我假设,你在 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 仓库安装。在这种情况下,您还需要几个依赖项,如 HDF5、netCDF-4、numpy、cython。

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

by @miraculixx is correct, but it assumes that you have already installed the 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 and the CDF Library have several dependencies (as pointed out by @Michal Dyzma). You can install them all using conda or pip, and apt.

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

3。编译C库:

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

make all.help

我将使用 GNU C 编译器为 Linux 构建发行版。我对 FORTRAN 界面不感兴趣,我的操作系统支持共享库。我想安装基于 Curses 的工具包程序,这些程序允许使用基于命令行的交互式 CDF 工具(这就是我们在步骤 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).后有一个space:

. $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)

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

pip install cdflib

在您的代码中:

import cdflib

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