2 .csv-Dateien kombinieren

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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
  • 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
  • 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.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.