der newbie von nebenan nochmal. Mein früheres Problem hat sich gelöst.Ich arbeite jetzt mit Scientific.IO.NetCDF.
Ich versuche gerade eine NetCDF-Datei zu kopieren, weil ich eben dimensionen, variablen und attribute teilweise übernehme und später teilweise ändere.
Dazu will ich jetzt auch die Attribute kopieren. Dieses wollte ich mit get und set machen. Sicher nicht so praktisch, wie ihr bestimmt wisst und wie mir der Segmentation Fault gezeigt hat. Deshalb unten der Code.
Der Segmentation Fault kam vor der zweitletzten Zeile.
Das letzte "VarAttValue" sollte den Fehler auslösen. Wie kann ich das Attribut von einer netcdf automatisch zu einer neuen Datei hinzufügen?
Das problem ist wohl, dass einige attribute built-in Methoden sind und andere attribute sind eben wowas wie 'units', also sehr nützlich.
Der Code (excl. sample file):>>> VarAttNames
['assignValue', 'getValue', 'long_name', 'typecode', 'units']
>>> VarAttValue=getattr(VarName,VarAttNames[1],None)
>>> VarAttValue
<built-in method getValue of NetCDFVariable object at 0xc37c00>
>>> VarAttValue=getattr(VarName,VarAttNames[2])
>>> print VarAttValue
longitude of west edge
Code: Alles auswählen
from Scientific.N import *
from Scientific.IO.NetCDF import *
import time
import os, pwd, string
import sys
from sys import argv
import readline
#Open griddata file (5 x 5 cells)
filemk = NetCDFFile('griddata_0005x0005.nc', 'r')
#print filemk.dimensions
#print filemk.variables
filenew = NetCDFFile('newgriddata.nc','w','Created'+time.ctime(time.time())+'by r.baatz')
#read and add dimensions
dims = filemk.dimensions.keys()
dimval = zeros(len(dims),Int)
for ii in range(len(dims)):
dimval[ii] = filemk.dimensions[dims[ii]]
for ii in range(len(dims)):
filenew.createDimension(dims[ii],int(dimval[ii]))
# mission #1 accomplished
mkVariables = filemk.variables.keys()
for ii in range(len(mkVariables)):
print ii
#Step1 GET
VarName = filemk.variables[mkVariables[ii]] #get name of variable
VarType = VarName.typecode() #get type
VarShape = VarName.shape #get shape
VarDims = VarName.dimensions #get dimensions
VarData = VarName.getValue() #get values (data = zeros(VarName.shape))
#Step2 SET
VarNetCDF = filenew.createVariable(mkVariables[ii],VarType,VarDims)
VarAttNames = dir(VarName) #get variable attributes
for jj in range(len(VarAttNames)): #set variable attributes 1 to n
print jj
VarAttValue=getattr(VarName,VarAttNames[jj])
print jj
setattr(VarNetCDF, VarAttNames[jj], VarAttValue)
VarNetCDF.assignValue(VarData)
Besten Dank schonmal, falls ich vergessen sollte zu antworten
Werd mir aber Mühe geben!