2016-05-14 127 views
5

我需要使用python讀取CDF文件。我找到了庫,但我不明白如何使用它。例如在這個(pythong lib),我需要下載CDF庫,我不知道在哪裏下載。有CDF的下載頁面,但它似乎與這個庫不相關。如何讀取Python中的公用數據格式(CDF)

+0

正在尋找此頁面:http://pythonhosted.org/CDF/getting.html? –

+0

@AndreHolzner,我沒有看到它。我怎麼安裝這個蛋文件? – seleucia

+1

@seleucia - 如果問題解決了,你應該考慮接受答案。 – Matteo

回答

4

@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 

重要提示: 上面的文件有它覆蓋它而不是追加到環境變量LD_LIBRARY_PATH線68一個錯誤。解決方法是容易的,用以下內容替換線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) 
+1

非常有幫助。但是NASA實際上是不是提供普通包裝系統(Ubuntu/Debian,RPM等)的軟件包?真的嗎?要求最終用戶進行這種手動構建軟件包,而不是使用包含升級安全問題和集成到標準升級機制中的錯誤修復的軟件包管理系統,這是非常危險的,也是一個很大的挑戰。或者我缺少一些典型用戶的基本信息? – nealmcb

+1

工作就像一個魅力!非常好的解釋。我很驚訝地發現在谷歌搜索一個cdf文件的例子中沒有有用的結果,但最後在發行本身中找到了一些,例如,在'cdf36_3-dist/samples/cacsst2.cdf'中 – nealmcb

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) 
+0

安裝過程中出現此錯誤:擴展名'ffnet.fortran._ffnet'具有Fortran源代碼,但未找到Fortran編譯器 – seleucia

+0

您安裝了anaconda嗎? – miraculixx

+0

是的,我正在使用anaconda。 – seleucia

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版本匹配的預構建的二進制文件。 http://www.lfd.uci.edu/~gohlke/pythonlibs/

這應該讓你用Spacepy CDF模塊去。

您也可以嘗試其他方法。從NASA頁面下載CDF到NetCDF轉換器並在CDF文件上運行它。

Python有很好的netCDF模塊,可以從GitHub或python repo安裝。在這種情況下,您還需要一些依賴項,如HDF5,netCDF-4,numpy,cython。

一旦你有了netCDF文件,你可以通過netCDF模塊或者scipy.io模塊訪問它。