Variablen zeilenweise auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mupic
User
Beiträge: 11
Registriert: Montag 21. Juli 2008, 18:20

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.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mupic
User
Beiträge: 11
Registriert: Montag 21. Juli 2008, 18:20

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!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mupic
User
Beiträge: 11
Registriert: Montag 21. Juli 2008, 18:20

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!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mupic
User
Beiträge: 11
Registriert: Montag 21. Juli 2008, 18:20

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mupic
User
Beiträge: 11
Registriert: Montag 21. Juli 2008, 18:20

Super, jetzt habe ich es!

Danke für deine Geduld, echt Spitze!!
Antworten