Seite 1 von 1
Dictionary 1:1 in Datei speichern
Verfasst: Samstag 9. November 2013, 13:01
von Nobuddy
Hallo zusammen,
Mein Code zum Erzeugen des Dictionary, sieht so aus:
Code: Alles auswählen
base = [{(row[0], row[1]) : row} for row in Data.LoadList('quelldaten')]
Das Ergebnis einer von vielen Zeilen aus base, würde dann so aussehen:
Code: Alles auswählen
{('Rotwein', 'Trollinger') : ['001', '284711', 'Rotwein Trollinger, 1980', '0,75 Liter']}
Wie kann ich so ein Dictionary in eine Datei speichern, so daß das Dictionary in der Datei erhalten bleibt?
Grüße Nobuddy
Re: Dictionary 1:1 in Datei speichern
Verfasst: Samstag 9. November 2013, 14:33
von Nobuddy
Ich bin jetzt, auf diese Lösung gekommen:
Code: Alles auswählen
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import os
import sys
import codecs
import data_load as Data
def SaveDict(listname, Dict):
"""
Speichere das Dictionary in die Datei.
Aufruf:
SaveDict(listname, Liste)
"""
a = codecs.open(Data.Path(listname), "w")
for x in Dict:
a.write('{}\n'.format(x))
base = [{(row[0], row[1]) : row} for row in Data.LoadList('quelldaten')]
SaveDict('test', base)
Re: Dictionary 1:1 in Datei speichern
Verfasst: Samstag 9. November 2013, 15:38
von BlackJack
@Nobuddy: `base` ist kein Dictionary sondern eine Liste. Und zwar eine Liste voll mit Dictionaries mit genau einem Schlüssel/Wert-Paar.
Warum würde man diese Datenstruktur haben wollen und dann noch alle Einträge als Zeichenkettendarstellung von Python-Datentypen in eine Datei schreiben wollen? Das ist kein Format in dem man Daten speichern sollte. Zum einen von der Struktur her, und zum anderen nicht in Python-Syntax. Wahrscheinlich würde eine CSV-Datei mit den `row`-Objekten die `Data.LoadList()` liefert, die bessere Variante sein.
Warum verwendest Du in Python 3 `codecs.open()`? Und dann auch noch ohne eine Kodierung anzugeben.
Re: Dictionary 1:1 in Datei speichern
Verfasst: Samstag 9. November 2013, 16:31
von Nobuddy
Hallo BlackJack,
BlackJack hat geschrieben:@Nobuddy: `base` ist kein Dictionary sondern eine Liste. Und zwar eine Liste voll mit Dictionaries mit genau einem Schlüssel/Wert-Paar.
Das habe ich inzwischen auch feststellen müssen, so macht das keinen Sinn.
BlackJack hat geschrieben:Warum würde man diese Datenstruktur haben wollen und dann noch alle Einträge als Zeichenkettendarstellung von Python-Datentypen in eine Datei schreiben wollen? Das ist kein Format in dem man Daten speichern sollte. Zum einen von der Struktur her, und zum anderen nicht in Python-Syntax. Wahrscheinlich würde eine CSV-Datei mit den `row`-Objekten die `Data.LoadList()` liefert, die bessere Variante sein.
Ich hatte mir das etwas anderst vorgestellt, als wie Du es ausgeführt hast, aber leider zutrifft.
Ich hatte mir gedacht, ob es möglich ist ein Dictionary aus einer Datei heraus nutzen zu können.
Ich weiß, Thema Datenbanken ... wäre ideal, aber das möchte ich vermeiden.
Bisher nutze ich auch eine CSV-Datei mit den `row`-Objekten die `Data.LoadList()` liefert, was sehr gut funktioniert.
Häufig benötigt man doch Dictionaryś, die einfach zu handeln sind, daher auch meine Überlegung.
BlackJack hat geschrieben:Warum verwendest Du in Python 3 `codecs.open()`? Und dann auch noch ohne eine Kodierung anzugeben.
Ich dachte, daß der Eintrag '# -*- coding: utf-8 -*-' auf `codecs.open()` hätte, dem ist aber wohl nicht so, wie ich Deiner Frage entnehmen kann.
Ist es generell nicht möglich, wie von mir angedacht, aus einer Datei direkt heraus ein Dictionary zu nutzen?
Re: Dictionary 1:1 in Datei speichern
Verfasst: Samstag 9. November 2013, 16:43
von Sirius3
@Nobuddy: wenn mit "nutzen" gemeint ist, einen Eintrag zu lesen ohne die ganze Datei einzulesen, dann würde ich mir nichts eigenes erfinden sondern sqlite benutzen. Ansonsten ist eine csv-Datei das deutlich bessere Format als Deine Repräsentation von dict-Objekten.
Re: Dictionary 1:1 in Datei speichern
Verfasst: Samstag 9. November 2013, 16:53
von Nobuddy
Hallo Sirius3,
habe es jetzt verstanden, entweder Datenbank oder csv-Datei.
Meine Idee, war wohl die 'Eierlegende Wolfsmichsau' ....

Re: Dictionary 1:1 in Datei speichern
Verfasst: Samstag 9. November 2013, 23:03
von mutetella
@BlackJack, @Sirius3: Warum kein json (mit string als key)?
mutetella
Re: Dictionary 1:1 in Datei speichern
Verfasst: Samstag 9. November 2013, 23:52
von BlackJack
@mutetella: Was wäre dadurch gewonnen? Da wären die Schlüssel dann redundant gespeichert und so ein Wörterbuch kann man auch aus CSV-Daten beim Einlesen ganz einfach erstellen.
Re: Dictionary 1:1 in Datei speichern
Verfasst: Sonntag 10. November 2013, 12:14
von Nobuddy
Hallo zusammen,
nach reiflicher Überlegung, bin ich zu dem Resultat gekommen:
- Listen als csv-Dateien zu speichern, wie ich es zuvor schon getan habe.
- Statt mit Listen zu arbeiten, verwende ich nun ausschließlich Dictionaryś.
Der Vorteil ist, wesentlich schnellere Verarbeitung der Daten und mit:
- dict.items()
- dict.values()
- dict.keys()
lässt sich allews machen.
Grüße Nobuddy