Hallo Leute und danke erst mal für Ihre schnelle Antwort.
Ich entschuldige mich, wenn ich nicht ganz klar war. Die Aufgabe wurde heute morgen umformuliert und ich hoffe jetzt etwa klarer zu sein.
++++++++++++++ Datei "report1"+++++++++++++++++
Die erste Spalte enthält folgende Einträge:
Daniel
Daniel
Daniel
Lucas
Lucas
Die zweite Spalte (String mit Zahlen, die durch leerzeichen getrennt sind) enthält folgende Einträge
"20 8 0"
"10 0 0"
"30 0 0"
"70 4 0"
"12 0 0"
++++++++++++++ Datei "report2"++++++++++++++++++++++++
Die erste Spalte enthält folgende Einträge:
David
Jan
Und die zweite Spalten folgende Einträge
"15 0 0"
"20 0 0"
Ich interessiere mich bei den String nur für die erste Zahlen ( z.B die Zahl 15 bei "15 0 0" soll eingelesen werden)
Es soll bei jedem Name jeweils die ersten Zahlen eingelesen und daraus den Mittelwert berechnet, der dann in die Datei "report" kommt
( z.B bei Daniel die drei mal vorkommt, den Mittelwert aus den 3 Zahlen berechnen)
Die Datei "report" soll so aussehen
Erste Spalte( fängte aber ab dem 2. Zelle) enthält folgende Einträge:
report1
report2
Zweite Spalte:
Daniel
Mittelwert aus den eingelesenen Zahlen von Daniel(dies sind 20 10 30)
Dritte Spalte:
Lucas
Mittelwert aus den eingelesenen Zahlen von Lucas(dies sind 70 12)
Vierte Spalte:
David
Mittelwert aus den eingelesenen Zahlen von David(dies ist 15)
fünfte Spalte:
Jan
Mittelwert aus den eingelesenen Zahlen von Jan(dies ist 20)
Trennzeichen ist der Strichpunkt ";"
Der folgende Code ist nur zum einlesen der berechnete Mittelwert aus der Datei "report" und noch daraus je nach report den Mittelwert zu berechnen.
# -*-coding:Latin-1 -*
import csv
import sys
class readInCSV(object):
def __init__(self):
self.report = list()
self.name = list()
def average(self, filename):
self.fileName = filename
try:
self.fileObj = open(self.fileName, "rb")
self.fileReader = csv.reader(self.fileObj, delimiter = ';')
except IOError:
print "Error --> can\'t find file or read data"
sys.exit()
report2name = dict()
for data in self.fileReader:
data = ",".join(data)
assignment = data.split(",", 1)
self.report .append(assignment[0])
self.name = [int(n) for n in assignment[1].split(',')]
report2name [assignment[0]] = self.name
for report, name in sorted( report2name .iteritems()):
print '%s: %.2f' % (report , float(sum(name )) / len(name))
self.fileObj.close()
Ich hätte auch den Name der Datei dem Konstruktor übergeben sollen aber ich weiss es nicht was am besten wäre, Da es noch weitere funktionen(z.B schreiben in der csv-Datei) in der Klasse kommen werden
Auch mit dem Privat attribut der Klasse. Ich glaube es wäre besser Sie so zu declarieren
self._report = list()
self._name = list()
Ich hoffe ich war nicht zu lang und auch, dass Sie die Aufgabe jetzt etwa besser verstehen werden.
Vielen Dank nochmals und viele Grüße
Fred