[英]How read Common Data Format (CDF) in Python
我需要使用python讀取CDF文件。 我找到了庫,但我不明白如何使用它。 例如在這( Python lib ),我需要下載CDF lib,我不知道在哪里下載。 有CDF的下載頁面,但它似乎與這個庫無關。
@miraculixx的答案是正確的,但它假設您已經安裝了CDF C庫 。
如果您在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所指出的那樣)。 你可以使用conda或pip和apt安裝它們。
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
( 注意: 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
你已經准備好了,去做好事:
假設您使用pip安裝了spacepy
,以下內容應該是開箱即用的:
from spacepy import pycdf
cdf = pycdf.CDF('/path/to/file.cdf')
print(cdf)
如果你有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)
前段時間我遇到了同樣的問題。 我假設你在Windows上工作......
根據Spacepy文檔,您需要幾個依賴項才能使用其cdf模塊。
首先它是SpacePy官方只支持32位python版本,因此你必須在323bit中擁有python。
其次 ,它需要在您的系統中安裝NASA CDF庫(也是32位版本)。 你可以從這里抓住它。
第三步繼續使用Spacepy依賴:
他們中的大多數是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
模塊訪問它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.