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.
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!!
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
Zuletzt geändert von ezzitt am Montag 9. Juni 2008, 15:34, insgesamt 5-mal geändert.
#!/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:
#!/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.
Zuletzt geändert von gerold am Montag 9. Juni 2008, 13:53, insgesamt 1-mal geändert.
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:
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