PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Python: zahlenwert aus datei auslesen



max_power
20-01-2008, 17:12
ich hab ein paar messwerte in verschiedenen dateien, die sehen alle so aus:



* Date = 16.01.2008
* Meas-UTim = 10:26:02:31 - 10:26:02:29
* Grating = 3
* CentrWavelength = 566.00
* T,Azim,LOS = -30.00 0.00 180.00
* Exposure-Time = 0.800
* DA-Modus = 1
* I = 1
* J = 20
* K = 1
* Detector = CCD_PI4, Lines 1- 25
* Spectrometer = ARC275
* SlitWidth = 100
* N = 1340
* X-Axis = Pixel
* Y-Axis = Counts
1.00000 2.38681600000000E+03
2.00000 2.53073200000000E+03
....


zum schluss stehen dann die messwerte, wie ich die in ein array bekomme weiß ich schon. aber mich interessiert zeile 6 der exposure wert. wie komm ich nun an diesen zahlenwert ran?
bei matlab geht das mit fscanf, aber matlab wollte ich eigentlich nicht benutzen...

Matflasch
20-01-2008, 18:45
Hi,


for line in file('daten.txt'):
arr = line.split('=')
print arr[1]
print float(arr[1])

Ist nur ein schnelles Beispiel. Mit der "split"-Methode kannst du die einzelnen Zeilen auseinander nehmen, wie du es haben möchtest :)

max_power
21-01-2008, 00:16
wenn ich das richtig verstehe, dann sollte in der liste arr dann die ganzen werte hinter dem '=' stehen.

wenn ich das durchlaufen lasse, dann stört er sich an dem datum, das ist ja keine fließkommazahl:




In [130]: for line in file('doas_0001_m.DAT'):
arr = line.split('=')
print arr[1]
print float(arr[1])
.....:
16.01.2008

---------------------------------------------------------------------------
ValueError Traceback (most recent call last)

/protokolle/FP/FP20/doas_daten/<ipython console> in <module>()

ValueError: invalid literal for float(): 16.01.2008

Christoph
21-01-2008, 13:38
wenn ich das durchlaufen lasse, dann stört er sich an dem datum, das ist ja keine fließkommazahl:

Das ist richtig. Das Datum musst Du als String lesen. Ob float() oder nicht hängt also von dem Wert von arr(0) ab (Stichwort "if-Abfrage"). Es lässt sich also nicht ganz vermeiden, dass Du noch ein wenig am Code änderst.

Matflasch
21-01-2008, 15:58
Es sollte auch keine Komplettlösung werden, ich wollte nur darauf hinweisen, wie das Problem zu lösen ist ;)

Wenn du die Zeilen mit split teilst, dann kannst du ja den linken Wert abfragen und den rechten Wert entsprechend behandeln.

max_power
21-01-2008, 20:11
ok, ich habs geschafft!

nicht schön, aber es funktioniert, für alle die es interessiert:



def exposure(datafile):
i = 0
for line in file('%s' %datafile):
arr = line.split('=')
i +=1
if i==6: return(float(arr[1]))
if i==7: break


danke für die hilfe