Addieren von CSV Daten

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
techpirat
User
Beiträge: 8
Registriert: Donnerstag 10. Februar 2022, 21:59

Hallo, ich importiere eine csv Datei und möchte diese gerne zusammen Rechnen. Dabei habe ich zwei Herausforderungen. Aber erstmal der Code:

Code: Alles auswählen

import csv
CSV_path = 'daten.csv'
with open('daten.csv') as csvdatei:
    csv_reader_object = csv.reader(csvdatei, delimiter=';')

    zeilennummer = 0
    for row in csv_reader_object:

        if zeilennummer == 0:
            print()
        else:
            print(f'{row[0]} \t|{row[7]} \t| Produkt Bezeichnung: {row[14]}.')
                       
        zeilennummer += 1
        
    print(f'Anzahl Datensätze: {zeilennummer-1}')
Die Ausgabe ist dann wie folgt:

Name1 |0,47 | Produkt Bezeichnung: Musterprodukt ~0,23.
Name4 |0,48 | Produkt Bezeichnung: Musterprodukt ~0,33.
Name33 |0,47 | Produkt Bezeichnung: Musterprodukt ~0,23.
usw.
Anzahl Datensätze: 84

Ich würde gerne die Werte in den jeweiligen Spalten addieren am Ende ausgeben um diese dann von einander abzuziehen.
Beispiel 0,47 - 0,23 = 0,24
Die zweite Herausforderung ist die Ausgabe der Spalte 14 dort ist der Text gefolgt von der Zahl die zu berechnen ist. Da wir aber immer die Tilde als Trenner haben ist es doch sicher möglich zu sagen das nur der Wert nach der Tilde ausgegeben werden soll oder?

Ich würde mich freuen wenn einer Helfen würde.
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

Wo ist dass konkrete Problem? Dass Du rechnen kannst, hast Du ja schon durch die Zeilennummer gezeigt. Strings haben viele hilfreiche Methoden, einfach mal in der Dokumentation nachlesen.

Zeilennummern zählt man übrigens nicht selbst, sondern benutzt `enumerate`. Wenn die erste Zeile ignoriert werden soll, dann macht man das vor der for-Schleife und nicht innerhalb:

Code: Alles auswählen

import csv

with open('daten.csv') as csvdatei:
    csv_reader = csv.reader(csvdatei, delimiter=';')
    _ = next(csv_reader)
    forzeilennummer, row in enumerate(csv_reader, 1):
        print(f'{row[0]} \t|{row[7]} \t| Produkt Bezeichnung: {row[14]}.')
    print(f'Anzahl Datensätze: {zeilennummer}')
techpirat
User
Beiträge: 8
Registriert: Donnerstag 10. Februar 2022, 21:59

Erstmal danke für die schnelle Antwort. Schöner schlanker Code. Danke schon mal dafür.
Mir ist halt nicht klar wie ich die Einzelnen Zahlen z.B. in Spalte 7 Addiere und am Ende Ausgebe um weiter Berechnungen damit zu machen
Zeilen Zählen ist ja einfach :)
Dann ist mir auch nicht klar wie ich den Wert hinter der Tilde extrahiere um den von der Spalte 7 für die weiteren Berechnungen abzuziehen.

Ich hoffe das macht es ein wenig klarer....
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@techpirat: Erst mal bekommst Du keine Zahlen sondern Zeichenketten, die müsstest Du in einer Zahl umwandeln im Falle von Spalte 8. Dazu gibt es eine Funktion. Und wie es aussieht, musst Du dazu vorher die Zeichenkette noch geringfügig anpassen. Sirius3 hat ja schon auf Zeichenkettenoperationen hingewiesen. Schau Dir mal an was es da so gibt, und probiere die auch mal aus um eine Idee zu bekommen was es da so alles gibt.

Bei dem Wert mit der Tilde aus Spalte 15 kommt es ein bisschen darauf an wie das tatsächlich aussieht. Ist das immer an der Stelle in der Zeichenkette? Dann kann man das mit Zeichenkettenoperationen bekommen. Ein etwas grösseres Geschütz wären reguläre Ausdrücke, für die es in der Standardbibliothek das `re`-Modul gibt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten