You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Wednesday, April 13th 2011, 3:51pm

2 .csv-Dateien kombinieren

Hallo Python Experte!
ich mache gerade mein Praktikum und habe erst seit kurzem angefangen Python zu lernen.
Letzte Woche hatte ich schön die erste Aufgabe von meinem Betreue bekommen und stehe einbißchen unter Druck und Stress.
Vielleicht könnte mir jemand helfen
Mein Problem ist folgendes.
Ich habe 2 CSV-Dateien "report1 und report2" (siehe unten)
und möchte mal ein Progamm schreiben, das Daten aus den 2 Dateien "report1 und report2" einliest und
in einem dritten Datei namens "report" (siehe unten)schreibt. Die Datei "report" soll wie im Anhang aussehen.

Ich habe schön ein Programm geschrieben, mit dem man aus dem Datei "report" die einzelnen Werten von "report1 und report2" einliest und
daraus den Mittelwert berechnet. Mein größte Problem ist jetzt wie mann aus den 2 Dateien "report1 und report2", die Datei "report" bekomme.

ich würde mich sehr freuen, wenn mir jemand helfe könnte, Da ich schon nächste Woche etwa an meinem Betreue präsentieren werde.

Danke im voraus und viele Grüße
Fred

Datei "report1.csv"
Erste Spalte

name:
Daniel
David
Sebastian
Jan
Lucas
Patrick

zweite Spalte

kmstand:
29
10
30
7
120
45

Datei "report2.csv"
Erste Spalte

name:
Daniel
David
Sebastian
Jan
Lucas
patrick
Emil

zweite Spalte

kmstand:
erste zelle ist leer
24
10
vierte zelle ist leer
50
20
40

2

Wednesday, April 13th 2011, 6:44pm

Poste uns doch mal bitte deinen bisherigen Code, damit wir sehen könenn, wie weit du schon gekommen bist.

3

Thursday, April 14th 2011, 4:00pm

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

4

Thursday, April 14th 2011, 4:52pm

Bitte poste deinen Code nochmal und benutzt diesmal bitte ein Code-Tag, welches du als Buttons weiter unten findest, da ansonsten die Tabs bzw. Leerzeichen verloren gehen und da es in Python keine (geschwungenen) Klammern gibt, sind diese umso wichtiger für das Verstehen deines Codes.

5

Thursday, April 14th 2011, 5:08pm

schau doch mal hier, das sieht ziemlich exakt nach deinem Problem aus :
http://www.python-forum.de/viewtopic.php?f=1&t=26025

;)

Similar threads

Social bookmarks