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.
mupic
User
Beiträge: 11
Registriert: Montag 21. Juli 2008, 18:20

Variablen zeilenweise auslesen

Beitragvon mupic » Montag 21. Juli 2008, 18:42

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=]day A B
1 15 23
2 22 23
3 12 12[/code]

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

Beitragvon cofi » Montag 21. Juli 2008, 21:05

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]
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 21. Juli 2008, 21:06

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 Modvoice
mupic
User
Beiträge: 11
Registriert: Montag 21. Juli 2008, 18:20

Beitragvon mupic » Dienstag 22. Juli 2008, 10:14

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!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 22. Juli 2008, 12:27

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 Modvoice
mupic
User
Beiträge: 11
Registriert: Montag 21. Juli 2008, 18:20

Beitragvon mupic » Dienstag 22. Juli 2008, 12:40

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!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 22. Juli 2008, 12:44

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 Modvoice
mupic
User
Beiträge: 11
Registriert: Montag 21. Juli 2008, 18:20

Beitragvon mupic » Dienstag 22. Juli 2008, 13:02

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.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 22. Juli 2008, 13:15

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 Modvoice
mupic
User
Beiträge: 11
Registriert: Montag 21. Juli 2008, 18:20

Beitragvon mupic » Dienstag 22. Juli 2008, 13:22

Super, jetzt habe ich es!

Danke für deine Geduld, echt Spitze!!

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]