netcdf_file#
- class scipy.io.netcdf_file(filename, mode='r', mmap=None, version=1, maskandscale=False)[Quelle]#
Ein Dateiobjekt für NetCDF-Daten.
Ein
netcdf_fileObjekt hat zwei Standardattribute: dimensions und variables. Die Werte beider sind Dictionaries, die Dimensionsnamen ihren zugehörigen Längen und Variablennamen den Variablen zuordnen. Anwendungsprogramme sollten diese Dictionaries niemals ändern.Alle anderen Attribute entsprechen globalen Attributen, die in der NetCDF-Datei definiert sind. Globale Dateiattribute werden durch Zuweisung zu einem Attribut des
netcdf_fileObjekts erstellt.- Parameter:
- filenamestring oder dateiähnlich
string -> Dateiname
- mode{‘r’, ‘w’, ‘a’}, optional
Lese-Schreib-Anhängemodus, Standard ist ‘r’
- mmapNone oder bool, optional
Ob filename beim Lesen gemappt werden soll. Standard ist True, wenn filename ein Dateiname ist, False, wenn filename ein dateiähnliches Objekt ist. Beachten Sie, dass bei Verwendung von mmap Datenarrays direkt auf die gemappten Daten auf der Festplatte verweisen und die Datei nicht geschlossen werden kann, solange Referenzen darauf existieren.
- version{1, 2}, optional
Version von NetCDF zum Lesen / Schreiben, wobei 1 für das *klassische Format* und 2 für das *64-Bit-Offset-Format* steht. Standard ist 1. Weitere Informationen finden Sie hier.
- maskandscalebool, optional
Ob Daten automatisch skaliert und/oder maskiert werden sollen, basierend auf Attributen. Standard ist False.
Methoden
close()Schließt die NetCDF-Datei.
createDimension(name, length)Fügt eine Dimension zum Dimensionsabschnitt der NetCDF-Datenstruktur hinzu.
createVariable(name, type, dimensions)Erstellt eine leere Variable für das
netcdf_fileObjekt, wobei ihr Datentyp und die verwendeten Dimensionen angegeben werden.flush()Führt einen Sync-to-Disk-Flush durch, wenn das
netcdf_fileObjekt im Schreibmodus ist.sync()Führt einen Sync-to-Disk-Flush durch, wenn das
netcdf_fileObjekt im Schreibmodus ist.Hinweise
Dieses Modul ist von pupynere abgeleitet. Der Hauptvorteil dieses Moduls gegenüber anderen Modulen ist, dass der Code nicht mit den NetCDF-Bibliotheken verknüpft werden muss. Für eine aktuellere Version des NetCDF-Standards und zusätzliche Funktionen sollten Sie jedoch das permissiv lizenzierte netcdf4-python in Betracht ziehen.
NetCDF-Dateien sind ein selbsterklärendes Binärdatenformat. Die Datei enthält Metadaten, die die Dimensionen und Variablen in der Datei beschreiben. Weitere Details zu NetCDF-Dateien finden Sie hier. Eine NetCDF-Datenstruktur besteht aus drei Hauptabschnitten:
Dimensionen
Variablen
Attribute
Der Dimensionsabschnitt zeichnet den Namen und die Länge jeder von den Variablen verwendeten Dimension auf. Die Variablen geben dann an, welche Dimensionen sie verwenden, sowie Attribute wie Dateneinheiten und enthalten die Datenwerte für die Variable. Es ist gute Praxis, eine Variable mit demselben Namen wie eine Dimension einzufügen, um die Werte für diese Achse bereitzustellen. Schließlich enthält der Attributabschnitt zusätzliche Informationen wie den Namen des Erstellers der Datei oder das Instrument, das zur Datenerfassung verwendet wurde.
Beim Schreiben von Daten in eine NetCDF-Datei muss oft die „Datensatzdimension“ angegeben werden. Eine Datensatzdimension ist die unbegrenzte Dimension für eine Variable. Eine Temperaturvariable könnte beispielsweise die Dimensionen Breite, Länge und Zeit haben. Wenn Sie der NetCDF-Datei weitere Temperaturdaten hinzufügen möchten, während sich die Zeit weiterentwickelt, sollte die Temperaturvariable die Zeitdimension als Datensatzdimension gekennzeichnet haben.
Darüber hinaus enthält der NetCDF-Dateikopf die Position der Daten in der Datei, sodass der Zugriff effizient erfolgen kann, ohne unnötige Daten in den Speicher zu laden. Er verwendet das Modul
mmap, um Numpy-Arrays zu erstellen, die auf die Daten auf der Festplatte abgebildet sind, aus demselben Grund.Beachten Sie, dass beim Öffnen einer Datei mit
netcdf_filemit mmap=True (Standard für schreibgeschützten Zugriff) Arrays, die von diesem zurückgegeben werden, direkt auf die auf der Festplatte gespeicherten Daten verweisen. Die Datei sollte nicht geschlossen werden und kann nicht sauber geschlossen werden, wenn solche Arrays noch vorhanden sind. Möglicherweise möchten Sie Datenarrays, die aus mmap-NetCDF-Dateien abgerufen wurden, kopieren, wenn sie nach dem Schließen der Datei verarbeitet werden sollen, siehe das folgende Beispiel.Beispiele
So erstellen Sie eine NetCDF-Datei
>>> from scipy.io import netcdf_file >>> import numpy as np >>> f = netcdf_file('simple.nc', 'w') >>> f.history = 'Created for a test' >>> f.createDimension('time', 10) >>> time = f.createVariable('time', 'i', ('time',)) >>> time[:] = np.arange(10) >>> time.units = 'days since 2008-01-01' >>> f.close()
Beachten Sie die Zuweisung von
arange(10)antime[:]. Das Freilegen des Slices der Zeitvariable ermöglicht das Setzen der Daten im Objekt, anstattarange(10)dietimeVariable überschreiben zu lassen.Um die gerade erstellte NetCDF-Datei zu lesen
>>> from scipy.io import netcdf_file >>> f = netcdf_file('simple.nc', 'r') >>> print(f.history) b'Created for a test' >>> time = f.variables['time'] >>> print(time.units) b'days since 2008-01-01' >>> print(time.shape) (10,) >>> print(time[-1]) 9
NetCDF-Dateien geben beim schreibgeschützten Öffnen Arrays zurück, die direkt auf speicherabgebildete Daten auf der Festplatte verweisen
>>> data = time[:]
Wenn die Daten nach dem Schließen der Datei verarbeitet werden sollen, müssen sie in den Hauptspeicher kopiert werden
>>> data = time[:].copy() >>> del time >>> f.close() >>> data.mean() 4.5
Eine NetCDF-Datei kann auch als Kontextmanager verwendet werden
>>> from scipy.io import netcdf_file >>> with netcdf_file('simple.nc', 'r') as f: ... print(f.history) b'Created for a test'