Seite 1 von 1

Import CSV. Datei - Verkettete Liste / Dictionary

Verfasst: Sonntag 10. Mai 2020, 09:53
von Natrium
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

Re: Import CSV. Datei - Verkettete Liste / Dictionary

Verfasst: Sonntag 10. Mai 2020, 10:00
von Sirius3
Den nächsten Schritt mußt Du schon selbst programmieren: den ersten Eintrag jeder Liste als Schlüssel für ein Wörterbuch benutzen.

Re: Import CSV. Datei - Verkettete Liste / Dictionary

Verfasst: Sonntag 10. Mai 2020, 12:21
von __blackjack__
@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.

Re: Import CSV. Datei - Verkettete Liste / Dictionary

Verfasst: Sonntag 10. Mai 2020, 12:53
von Natrium
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 :)