Seite 1 von 1

Variablen zeilenweise auslesen

Verfasst: Montag 21. Juli 2008, 18:42
von mupic
Hallo!
Ich habe folgenden Code geschrieben:

Code: Alles auswählen

infile = "E/text.txt"
for line in fileinput.input(infile):
    values = line.split(" ")
    day = int(values[0])
    A = float(values[1])
    B = float(values[2])     
fileinput.close()
Und zwar lese ich damit aus folgender Textdatei (3 Spalten) die Werte aus.

Code: Alles auswählen

day  A    B
1     15   23
2     22   23
3     12   12
mit "print A" gibt er mir dann auch schön alle A Werte aus.

Ich möchte jetzt, dass das Programm am Anfang in der ersten Zeile beginnt und den Variablen die Werte zuweißt. also day=1; A=15 B=23
Dann werde ich mit diesen Variablen eine Berechnung machen.
Anschliend soll das Programm durch eine Schleife wieder hoch springen, und dann in der Zeile(vorherige Zeile+1) also Zeile 2 weitermachen. E
Es soll also eine Schleife laufen, bis der letzte Tag (=365) erreicht ist.

beginn: day=1; A=15; B=23 -> etwas berechnen
1.loop day=2; A=22; B=23 -> etwas berechnen
2.loop day=1; A=12; B=12 -> etwas berechnen
...

Wie kann ich das jetzt machen, dass er nur die Werte der ersten Zeile nimmt und im nächsten loop dann die der (x+1)ten Zeile den Variablen zuweißt. Wie funktioniert das zeilenweise zuordnen? Ich komme da nicht weiter.

Wäre echt dankbar wenn ihr mir ein paar Tips geben könntet, ich bin kein Informatiker, muss aber diesen Code unbedingt haben.

Danke!

Edit (Leonidas): Code in Tags gesetzt.

Verfasst: Montag 21. Juli 2008, 21:05
von cofi
Nun du könntest erstmal das ganze File auslesen und die Werte für `day', `A' und `B' in Listen schreiben.

Code: Alles auswählen

day, A, B = []
try:
      infile = "E/text.txt"
      for line in fileinput.input(infile):
        values = line.split(" ")
        day.append(int(values[0]))
        A.append(float(values[1]))
        B.append(float(values[2]))     
finally:
      fileinput.close()
zipped_list = zip(day,A,B)
So hast du für deine Werte Dreier-Tupel und kannst über die `zipped_list' iterieren und deine Werte auslesen.

Code: Alles auswählen

for group in zipped_list:
  day = group[0]
  A = group[1]
  B = group[2]

Verfasst: Montag 21. Juli 2008, 21:06
von Leonidas

Code: Alles auswählen

s = """day  A    B
1     15   23
2     22   23
3     12   12""".splitlines()

for line in s[1:]:
    vals = dict(zip(s[0].split(), line.split()))
    berechnung(vals)

Verfasst: Dienstag 22. Juli 2008, 10:14
von mupic
Hey, vielen Dank, damit komm ich schon weiter.

@Leonidas:
Wie bekomme ich jetzt in deiner Methode meinen Textfile eingelesen?
Es klappt nicht, wenn ich s = """....""" mit s = "text.txt" ersetze.
Kannst du mir das noch erklären? Danke!

Verfasst: Dienstag 22. Juli 2008, 12:27
von Leonidas
mupic hat geschrieben:Wie bekomme ich jetzt in deiner Methode meinen Textfile eingelesen?
Es klappt nicht, wenn ich s = """....""" mit s = "text.txt" ersetze.
Kannst du mir das noch erklären? Danke!
Naja, ``s`` ist eben der Inhalt der Datei, also muss man die Datei vorher auslesen:

Code: Alles auswählen

f = open('text.txt', 'r')
s = f.read().splitlines()
f.close()

Verfasst: Dienstag 22. Juli 2008, 12:40
von mupic
Ah natürlich, da hab ich auf der Leitung gestanden.
Noch eine letzte Frage:

Wie spreche ich jetzt genau einen Wert aus dem Textfile an?

z.B. x = day aus Zeile 5

Danke!

Verfasst: Dienstag 22. Juli 2008, 12:44
von Leonidas
Dann musst du die ``vals`` dictionaries jeweils in eine Liste anhängen (in der for-Schleife) und dann kannst du drauf zugreifen.

Alternativ die for-Schleife durch diese LC ersetzen:

Code: Alles auswählen

vals = [dict(zip(s[0].split(), line.split())) for line in s[1:]]
Dann kannst du via Index auf ``vals`` zugreifen und die Zeilen bekommen.

Verfasst: Dienstag 22. Juli 2008, 13:02
von mupic
Hm, ich komme da nicht klar.

Kannst du mir ein Beispiel geben, wie ich eine bestimmte Zahl (Zeile 3, Reihe2) raus bekomme?
Bekomme das script nicht zum Laufen.

Verfasst: Dienstag 22. Juli 2008, 13:15
von Leonidas

Code: Alles auswählen

s = """day  A    B
1     15   23
2     22   23
3     12   12""".splitlines()

vals = [dict(zip(s[0].split(), line.split())) for line in s[1:]]
print vals[2]['A']
Das kann man alles wunderbar im interaktiven Interpreter testen.

Verfasst: Dienstag 22. Juli 2008, 13:22
von mupic
Super, jetzt habe ich es!

Danke für deine Geduld, echt Spitze!!