Code: Alles auswählen
def load():
f = open('data.dat','r')
objects = 0
frames = 0
global timestep
timestep = 0
i = 0
x,y,z,Vx,Vy,Vz,mass = 0,0,0,0,0,0,0
for line in f:
if line[0] != '#':
if line[:3] == "obj":
objects = int(line[8:-1])
if line[:3] == "fra":
frames = int(line[7:-1])
if line[:3] == "tim":
timestep = int(line[9:-1])
if objects != 0 and frames != 0 and timestep != 0:
data = array(type= 'Float32', shape=(frames,objects,7))
#if line[:3] == "nam":
if line[:3] == "pos":
x,y,z = map(float, line[4:].split(','))
if line[:3] == "vel":
Vx,Vy,Vz = map(float, line[4:].split(','))
if line[:3] == "mas":
mass = float(line[5:-1])
data[0][i] = [x,y,z,Vx,Vy,Vz,mass]
print data[0][0]
print data[0][1]
if i == (objects - 1):
break
i += 1
f.close()
die funktion soll follgende datei auslesen:
Code: Alles auswählen
#Input Datei
objects 2
frames 10000
timestep 1000
#Objektdaten
name "Erde"
pos 0,0,0
vel 0,0,300.0
mass 5.977e24
name "Mond"
pos 3.84405e8,0,0
vel 0,1.03e3,300.0
mass 7.348e22
Das seltsam ist nun der output:
Code: Alles auswählen
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 3.00000000e+02 5.97699988e+24]
[ 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0.]
[ 3.84404992e+08 0.00000000e+00 0.00000000e+00 0.00000000e+00
1.03000000e+03 3.00000000e+02 7.34800019e+22]
die Erste hälfte ist mir klar: Die datei wurde ausgelesen und die erste Zeile des Arrays ausgefüllt. Die zweite ist noch leer
Aber in der zweiten hälfte wirds echt sehr seltsam: Die erste Zeile ist aus unerfindlichen Gründen wieder leer und die zweite ist dem input entsprechend ausgefüllt. Woher kommt das? Ich hab jetzt ne geschlagene Stunde rum probiert und seh einfach den Fehler nicht. Falls mir einer sagen könnte, was ich falsch gemacht hab, wäre ich extrem dankbar.
Oder gibt es eine bessere und einfachere Möglichkeit Daten einzulesen als ein plaintext Datei zu parsen?
-- Sonium