Seite 1 von 1
zahlen addieren
Verfasst: Montag 9. Juni 2008, 10:57
von ezzitt
Hallo,
möchte ne skript schreiben damit ich zahlen spaltenweise addiere,
die Anzahl der Spalten ist variabel.
je zeile kann beliebig viele zahlen sein.
bsp:
1 ; 2 ; 10 ; 12; -19
9 ; 12; -11; 13;
0 ; 14; 23 ; 34; -45; 56
34;
45; 12; 78;
danke
die zahlen sind in einer datei gespeichert habe schon geschaft die datei zu öffnen um die zeile zu lesen und in einer Liste zu speichern.
ich weiss nicht wie ich weiter komme!!
Code: Alles auswählen
tmppath =... # hier pfad wo die datei gespeichert ist
pfile = open( tmppath, "r" )
cols = []
def read():
line = pfile.readline()
while line != 0:
#{
li_line = line.split(';')
for entry in li_line:
#{
try:
entry = int(entry)
cols.append(entry)
except:
entry = 0
cols.append(entry)
#}
line = pfile.readline()
#}
return line
Verfasst: Montag 9. Juni 2008, 11:21
von gerold
Hallo ezzitt!
Willkommen im Python-Forum!
1.) Der Titel dieses Threads ist nicht aussagekräftig. Bitte ändere diesen mit einem Klick auf den [EDIT]-Button.
2.) Wo liegt dein Problem? Was hast du bereits für Code geschrieben? Wobei sollen wir dir helfen? Woher bekommst du die Zahlen?
3.) Hausaufgaben machen wir nicht. Wir helfen dir bei Problemen. Aber vorher solltest du eine Python-Einführung lesen. -->
http://halvar.at/python/einstieg_in_python/
mfg
Gerold

Verfasst: Montag 9. Juni 2008, 12:27
von Leonidas
Den Code bitte in entsprechende Tags stellen, sonst ist der Code wertlos und funktioniert nicht.
Verfasst: Montag 9. Juni 2008, 13:05
von gerold
Hallo ezzit!
Ich würde es ja so, oder so ähnlich machen:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import csv
# Datei öffnen
datafile = file("werte.txt", "rU")
# Nur Zeilen mit Werten verwenden
datalines = ( line for line in datafile if line.strip() )
# Dictionary für die Summen
summen = {}
# CSV-Zeilen parsen (jede Zeile durchlaufen)
csvlines = csv.reader(datalines, delimiter = ";")
for csvline in csvlines:
for index, value in enumerate(csvline):
try:
value = int(value)
except ValueError:
value = 0
summen[index] = summen.get(index, 0) + value
# Datei schließen
datafile.close()
# Schlüssel des Dictionary in eine Liste speichern und sortieren
keys = summen.keys()
keys.sort()
# Ergebnis anzeigen
for key in keys:
print "Summe Spalte %i: %3i" % (key, summen[key])
Ohne Generatoren und CSV-Modul würde das dann so aussehen:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
# Datei öffnen
datafile = file("werte.txt", "rU")
# Dictionary für die Summen
summen = {}
# jede Zeile durchlaufen
for line in datafile:
# Nur Zeilen mit Werten verwenden
if line.strip():
datalist = line.split(";")
for index, value in enumerate(datalist):
try:
value = int(value)
except ValueError:
value = 0
summen[index] = summen.get(index, 0) + value
# Datei schließen
datafile.close()
# Schlüssel des Dictionary in eine Liste speichern und sortieren
keys = summen.keys()
keys.sort()
# Ergebnis anzeigen
for key in keys:
print "Summe Spalte %i: %3i" % (key, summen[key])
mfg
Gerold
Edit: Dateien sollte man natürlich auch wieder schließen.
Verfasst: Montag 9. Juni 2008, 13:39
von ezzitt
Danke Dir Gerold,
das funktioniert, ich habe die 2te Version getestet, was ich nicht verstehe ist die sortierung von Keys.kannst du mir das schrittweise erkären.
jetzt möchte ich die Ergebnisse in die Datei schreiben habe so überlegt:
Code: Alles auswählen
datafile= open( tmppath, "a" )
outline = "Summe Spalte %i: %3i" % (key, summen[key])
datafile= writelines(outline)
[/code]
Verfasst: Montag 9. Juni 2008, 14:01
von gerold
Hallo ezzitt!
ezzitt hat geschrieben:was ich nicht verstehe ist die sortierung von Keys.
Ein Dictionary ist unsortiert. Wenn du also eine genaue Reihenfolge haben möchtest, dann musst du die Schlüssel eines Dictionaries sortieren.
Das Beispiel mit der sortierten Liste ist aber etwas unglücklich gewählt, denn du könntest auf die sortierte Liste verzichten und einfach mit ``for index in xrange(len(werte))`` arbeiten, da die Keys ja sowiso eine komplette, bei 0 beginnende Datenfolge sind.
ezzitt hat geschrieben:jetzt möchte ich die Ergebnisse in die Datei schreiben
Code: Alles auswählen
destfile = file("zieldatei.txt", "a")
sumlist = []
for index in xrange(len(summen)):
sumlist.append(str(summen[index]))
destfile.write("; ".join(sumlist) + "\n")
destfile.close()
mfg
Gerold

Danke sehr
Verfasst: Montag 9. Juni 2008, 14:51
von ezzitt
Danke sehr