2016-05-14 14 views
5

Ho bisogno di leggere il file CDF usando python. Ho trovato librerie ma non ho capito come usarlo. Per esempio a questo (pythong lib), ho bisogno di scaricare CDF lib, non so dove scaricare. C'è una pagina di download per CDF ma sembra irrilevante con questa libreria.Come leggere Common Data Format (CDF) in Python

+0

stanno cercando questa pagina: http://pythonhosted.org/CDF/getting.html? –

+0

@AndreHolzner, non l'ho visto. come posso installare questi file di uova? – seleucia

+1

@seleucia: dovresti considerare di accettare una risposta se il tuo problema è risolto. – Matteo

risposta

4

Il answer di @miraculixx è corretto, ma si presuppone che sia già installato il CDF C Library.

Ecco una guida facile da seguire se non sapevi nemmeno quale fosse il formato del file CDF prima di aver trovato questa domanda su SO.

1. Scaricare l'ultima versione della libreria C CDF:

Potete trovare l'ultima release stabile a questa link. Prendi il codice sorgente usando wget ed estrailo. Nota: quanto segue creerà una directory nella cartella corrente ./ se si desidera scaricare il codice in un percorso diverso, assicurarsi di modificare il codice riportato di seguito.

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. Installare tutte le dipendenze:

SpacePy e la Biblioteca CDF hanno diverse dipendenze (come sottolineato da @Michal Dyzma). È possibile installarli tutti utilizzando conda o pip e apt.

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

3. compilare la libreria C:

Dovreste aver scaricato un file README.install che contiene un sacco maggiori dettagli su questo passaggio di quanto io fornirò. I due centesimi sono che si desidera verificare quali variabili di compilazione sono obbligatorie/facoltative per il proprio sistema e le proprie esigenze.

make all.help 

Costruirò la distribuzione per Linux utilizzando il compilatore GNU C. Non sono interessato all'interfaccia FORTRAN e il mio sistema operativo supporta librerie condivisibili. Voglio installare i programmi del toolkit Curses che consentono di utilizzare gli strumenti CDF interattivi basati sulla riga di comando (ecco perché abbiamo installato la dipendenza libncurses5-dev nel passaggio 2). Di conseguenza questo è il comando make finale:

make OS=linux ENV=gnu CURSES=yes FORTRAN=no UCOPTIONS=-O2 SHARED=yes -j4 all 
make install #no sudo 

L'installazione dovrebbe funzionare liscio e aggiungere tutti i file nella ./bin, ./include, e ./lib sottodirectory.

4.Impostare le variabili di ambiente:

Ci dovrebbe essere un file in ./bin chiamato definitions.B che fa questo automaticamente per voi, renderlo eseguibile con chmod+x e aggiungere la seguente riga al ~/.bashrc (Nota: 1) Sto assumendo hai installato la libreria sul percorso $HOME/Libraries/; 2) V'è uno spazio dopo il .):

. $HOME/Libraries/cdf/cdf36_3-dist/bin/definitions.B 

NOTA IMPORTANTE: Il file ha un bug a linea 68, invece di aggiungere alla variabile d'ambiente LD_LIBRARY_PATH sovrascrive sopra. La correzione è facile, sostituire linea 68 con il seguente:

export LD_LIBRARY_PATH=$HOME/Libraries/cdf/cdf36_3-dist/lib:$LD_LIBRARY_PATH 

Se per qualche motivo definitions.B non c'è, semplicemente aggiungere il seguente:

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. È tutto pronto , vai a fare il bene:

Supponendo di aver installato spacepy con pip, il seguente dovrebbe funzionare fuori dalla scatola:

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

Molto utile. Ma la NASA in realtà non sta fornendo pacchetti per sistemi di packaging comuni (Ubuntu/Debian, RPM, ecc.)? Sul serio? Chiedere agli utenti finali di eseguire questo tipo di creazione manuale di pacchetti, piuttosto che utilizzare un sistema di gestione dei pacchetti con aggiornamenti per problemi di sicurezza e correzioni di errori integrati in un meccanismo di aggiornamento standard, è pericoloso e una grande imposizione. O mi manca qualcosa di base sugli utenti tipici? – nealmcb

+1

Ha funzionato come un fascino! Spiegazione molto bella Sono stato sorpreso di non vedere risultati utili in una ricerca su google per un file cdf di esempio, ma alla fine ho trovato diversi nella distribuzione stessa, ad es. in 'cdf36_3-dist/samples/cacsst2.cdf' – nealmcb

2

Se hai strumento pacchetto di Python, pip installato, è possibile ottenere la libreria cdf spacepy come segue:

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

Nota Questo installerà un sacco di dipendenze, tra cui NumPy e SciPy. Questi possono essere un po 'difficili da installare da zero. Potresti voler installare prima un pacchetto già pronto, ad es. anaconda. Una volta fatto, basta usare il comando precedente e spacepy dovrebbe installare come un gioco da ragazzi.

Una volta che l'installazione di spacepy ha avuto successo, secondo questa example dovrebbe funzionare qualcosa di simile:

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

Durante l'installazione sto ricevendo questo errore: l'estensione 'ffnet.fortran._ffnet' ha origini Fortran ma nessun compilatore Fortran trovato – seleucia

+0

hai installato anaconda? – miraculixx

+0

Sì, sto usando anaconda. – seleucia

2

Mentre fa ho avuto lo stesso problema. Presumo, lavori su Windows ...

In base alla documentazione di Spacepy sono necessarie diverse dipendenze per utilizzare il suo modulo cdf.

Primo di tutto SpacePy supporta ufficialmente solo la versione python a 32 bit, quindi è necessario avere python in 323 bit.

Secondo, richiede la libreria CDF NASA installata nel sistema dell'utente (anche versione a 32 bit). Puoi prenderlo da here.

Terzo procedere con dipendenze Spacepy:

  • NumPy
  • SciPy
  • matplotlib
  • h5py
  • NetworkX
  • adware protection

Molti di questi fanno parte del pacchetto Anaconda. Se non lo sono e devi installarli semplicemente pip install <package name>.

Se hai problemi con la compilazione dai sorgenti, ti consiglio di andare al sito web di Christoph Gohlke e prendere i binari pre-costruiti per Windows che corrispondono alla tua versione di Python. http://www.lfd.uci.edu/~gohlke/pythonlibs/

Questo dovrebbe andare con il modulo Spacefy CDF.

Puoi anche provare un altro approccio. Scarica il convertitore CDF-to-netCDF dalla pagina NASA ed eseguilo sul tuo file CDF.

Python ha un bel modulo netCDF, che può essere installato da GitHub, o repo python. In questo caso hai bisogno anche di diverse dipendenze come HDF5, netCDF-4, numpy, cython.

Una volta ottenuto il file netCDF, è possibile accedervi con il modulo netCDF o il modulo scipy.io.