Import CSV. Datei - Verkettete Liste / Dictionary

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
Natrium
User
Beiträge: 15
Registriert: Montag 13. April 2020, 16:13

Moin zusammen,

Ich habe mal wieder eine Frage:

Ich möchte in meinem Python Programm eine csv-Datei importieren & die importierten Daten sollen im Programm folgend aussehen:

Code: Alles auswählen

Hans = { "A" : ["B","C","E","F"],
          "B" : ["D", "E"],
          "C" : ["F", "D"],
          "E" : [],
          "F" : []
        }

In meiner CSV Datei habe ich die Daten jetzt folgend eingebaut:
A,B,C,E,F
B,D,E
C,F,D
E
F

Programmcode habe ich bis dato folgenden entworfen:

Code: Alles auswählen

import csv
with open("test1.csv") as csvdatei:
    csv_reader_object = csv.reader(csvdatei)
    for row in csv_reader_object:
        print(row)
Der Output ist dann aber lediglich folgender:

Code: Alles auswählen

['A', 'B', 'C', 'E', 'F']
['B', 'D', 'E']
['C', 'F', 'D']
['E']
['F']
Hat jemand einen Tipp, wie ich es hinbekomme, dass die importierten Daten, wie oben zu sehen, importiert werden?

Vielen Dank im Voraus & einen sonnigen Sonntag )
lg
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Den nächsten Schritt mußt Du schon selbst programmieren: den ersten Eintrag jeder Liste als Schlüssel für ein Wörterbuch benutzen.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Natrium: Der Namenszusatz `_object` ist überflüssig, weil was soll es denn sonst sein? Alles was man in Python an einen Namen binden kann, also *jeder* Wert, ist ein Objekt.

Textdateien sollte man immer mit einer expliziten Angabe der Kodierung öffnen. Wichtig bei CSV-Dateien ist auch noch das `newline`-Argument weil die Behandlung von Zeilenenden sich bei den Betriebssystemen unterscheidet und bei CSV-Dateien wichtig ist, das die unabhängig vom System unverändert geschrieben und gelesen werden.

Das einlesen in ein Wörterbuch in der gezeigten Form geht mit eine „dict comprehension“ problemlos als Einzeiler:

Code: Alles auswählen

#!/usr/bin/env python3
import csv
from prettyprinter import cpprint


def main():
    with open("test.csv", encoding="ascii", newline="") as csv_datei:
        result = {key: values for key, *values in csv.reader(csv_datei)}
    cpprint(result)


if __name__ == "__main__":
    main()
Ausgabe:

Code: Alles auswählen

{
    'A': ['B', 'C', 'E', 'F'],
    'B': ['D', 'E'],
    'C': ['F', 'D'],
    'E': [],
    'F': []
}
`prettyprinter` ist ein externes Modul. Man kann auch das `pprint`-Modul aus der Standardbibliothek verwenden, aber dafür ist die Repräsentation des Wörterbuchs zu kurz — das passt noch auf eine Zeile und `pprint()` gibt das mit den Defaultargumenten auch so aus, also nicht ander als das normale `print()` das machen würde.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Natrium
User
Beiträge: 15
Registriert: Montag 13. April 2020, 16:13

Vielen lieben Dank euch beiden :)

Das hat auf jeden Fall schon weitergeholfen - bin jedes Mal erneut fasziniert, was es für Plugins schon gibt.

Merci & einen schönen Sonntag noch :)
Antworten