如何在Python中读取通用数据格式(CDF)

时间:2016-05-14 21:22:04

标签: python io data-formats common-data-format

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

4 个答案:

答案 0 :(得分:5)

@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接口不感兴趣,我的操作系统支持可共享库。我想安装基于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(< strong>注意: 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。你已经完成所有工作,去做好事:

假设您使用pip安装了spacepy,则以下内容应该是开箱即用的:

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

前一段时间我遇到了同样的问题。我假设你在Windows上工作......

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

首先所有的SpacePy官方只支持32位python版本,因此你必须在323bit中使用python。

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

第三次继续使用Spacepy依赖项:

  • numpy的
  • SciPy的
  • matplotlib
  • h5py
  • networkx
  • 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模块访问它。

答案 3 :(得分:0)

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

pip install cdflib

在您的代码中:

import cdflib

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