Dictionary aus ersten beiden Spalten einer .csv

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
SkunkWorks86
User
Beiträge: 1
Registriert: Montag 26. Januar 2009, 16:52

Hallo zusammen!

Ich bin noch ziemlich neu in der Materie und habe mich vor kurzem durch das Skript "A Byte of Python" durchgearbeitet um einen ersten Einblck zu erlangen.
Nun stehe ich vor meiner ersten echten Aufgabe und ich stelle fest, dass ich doch nicht so viel weiß wie ich zunächst dachte.

Folgendes Problem: Ich habe eine csv Datei mit 12 Spalten und knapp 2000 Zeilen (Klassifikation von Produkten in einem Lager mit einer bestimmten Hierarchie). Ziel soll es sein diese Klassifikation in eine .owl Datei zu überführen.
Da mich momentan jedoch nur die ersten beiden Spalten (ID und kodierter Name) interessieren muss ich diese irgendwie in ein Dictionary bekommen wobei die die ID den Schlüssel und der kodierte name den Wert (ID:kodierter Name)darstellen soll.

Bisher bin ich so weit gekommen:

Lösungsansatz1:

Code: Alles auswählen

import csv 
reader = csv.reader(open("datei.csv", "r")) 
for row in reader: 
    print row

Ansatz2:

Code: Alles auswählen

import csv 
content = csv.reader(open("datei.csv", 'r'), delimiter=';') 
keys = content.next() 
data = [dict(zip(keys, line)) for line in content] 
print data

Ansatz3: (Ist am übersichtlichsten)

Code: Alles auswählen

import csv
spamReader = csv.reader(open('datei.csv', 'r'), delimiter=';', quotechar='|')
for row in spamReader:
      print '     '.join(row)

Das Dictionary aus den jeweiligen zeileneinträgen der 1. und 2. Spalte sollte dann noch am besten hierarchisch gemäß dem Lager sortiert werden, d.h. nach dem kodierten Namen.


Danke für Eure Tipps/Hilfe!!

Grüße,
Tobias
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Es gibt übrigens auch einen DictReader, der dir die Zeilen automatisch in ein Dictionary verpackt.

Du sagst, dich interessieren momentan nur ID und kodierter Name. Das impliziert irgendwie, dass dich später mehr interessieren wird. Ich würde deswegen nichts künstlich beschränken, wenn technisch nichts dagegen spricht. Ansonsten kannst du bei Listen mittels Slices nur die gewünschten Felder holen:

Code: Alles auswählen

foo = [1, 2, 3, 4]
print foo[:2]
# ergibt [1, 2]
Damit kannst du beim Dictionary zusammenbasteln (Beispiel 2) die Einträge im Dict beschränken.

Gruß,
Manuel
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

mit dem dictreader sollte es auch so gehen

Code: Alles auswählen

                            # Einlesen der daten ("," ist bei csv der Default-Delimiter)
                            content = csv.reader(open("data.csv"), 'r'))
                            # In der ersten Zeile stehen die Spaltennamen, die speichern wir uns
                            keys = content.next()
                            data = []
                            for line in content:
                              data.append(dict(zip(keys, line)))
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

csv.DictReader ist genau für eine solche Aufgabe geschaffen.
Antworten