zahlen addieren

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
ezzitt
User
Beiträge: 7
Registriert: Montag 9. Juni 2008, 10:45

Montag 9. Juni 2008, 10:57

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
Zuletzt geändert von ezzitt am Montag 9. Juni 2008, 15:34, insgesamt 5-mal geändert.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 9. Juni 2008, 11:21

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 9. Juni 2008, 12:27

Den Code bitte in entsprechende Tags stellen, sonst ist der Code wertlos und funktioniert nicht.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 9. Juni 2008, 13:05

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.
Zuletzt geändert von gerold am Montag 9. Juni 2008, 13:53, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
ezzitt
User
Beiträge: 7
Registriert: Montag 9. Juni 2008, 10:45

Montag 9. Juni 2008, 13:39

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]
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 9. Juni 2008, 14:01

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
ezzitt
User
Beiträge: 7
Registriert: Montag 9. Juni 2008, 10:45

Montag 9. Juni 2008, 14:51

Danke sehr
Antworten