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
risposta
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)
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
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
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)
Durante l'installazione sto ricevendo questo errore: l'estensione 'ffnet.fortran._ffnet' ha origini Fortran ma nessun compilatore Fortran trovato – seleucia
hai installato anaconda? – miraculixx
Sì, sto usando anaconda. – seleucia
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
.
- 1. Come plottare cdf in matplotlib in Python?
- 2. multivariata normale CDF in Python utilizzando SciPy
- 3. PHP Data String Format
- 4. Perché l'utilità file identifica i file Microsoft Word come CDF? Cos'è questa CDF?
- 5. funzione ".format" di python
- 6. Data Format indicata sulla DatePicker
- 7. Apache POI valuta Data Format
- 8. Reshape Panel Data Wide Format to Long Format
- 9. python .format() campi ripetuti?
- 10. Python, .format() e UTF-8
- 11. Calcola la funzione di distribuzione cumulativa (CDF) in Python
- 12. Plottaggio CDF di una serie di panda in python
- 13. Rails ActiveSupport :: TimeWithZone as_json data format issue
- 14. Mandelbrot Imposta implementazione in Common Lisp
- 15. come generare JsonStringer per questo JSON Data Format?
- 16. Come stampare un elenco come matrice in Common Lisp
- 17. python string format sopprimi/silent keyerror/indexerror
- 18. Py Pandas .format (dataframe)
- 19. Come leggere i dati cx_Oracle.LOB in Python?
- 20. srotolare/argomenti splat in Common Lisp
- 21. Come leggere il bytecode python?
- 22. _NT_SYMBOL_PATH format
- 23. cellule Format se la cella contiene data meno di oggi
- 24. Format Python troncato galleggiante come int nella stringa
- 25. numeri Format tooltip in Highcharts
- 26. leggere un file binario (python)
- 27. Elenco circolare in Common Lisp
- 28. Plot un grafico CDF da Microsoft Excel
- 29. (comporre) in Common Lisp
- 30. md-datepicker input format
stanno cercando questa pagina: http://pythonhosted.org/CDF/getting.html? –
@AndreHolzner, non l'ho visto. come posso installare questi file di uova? – seleucia
@seleucia: dovresti considerare di accettare una risposta se il tuo problema è risolto. – Matteo