Hi...
Gibt es eigentlich eine möglichkeit einfach ein beliebiges Dict in eine Datei zu speichern und später wieder schnell zu lesen???
Am besten noch mehere Dict's in eine Datei
Genrich
Dict speichern/lesen in Datei...
Ist sehr Interressant, funktioniert aber anscheinend nicht mit Dicts. Wenn ich versuche ein Dict mit pickle zu schreiben bekomme ich nur eine Fehlermeldung aus dem pickle Modul:Milan hat geschrieben:Pickle bzw Shelve könnte noch was für dich sein.
Code: Alles auswählen
File "C:\Python\lib\pickle.py", line 1382, in dump
Pickler(file, protocol, bin).dump(obj)
File "C:\Python\lib\pickle.py", line 210, in __init__
self.write = file.write
Code: Alles auswählen
Daten={"Text":"Ein Testtext"}
FileHandle = open("TestDatei.bin", 'w')
pickle.dump(FileHandle, Daten)
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Na wenn Du auch die Argumente vertauscht:
Ginge auch aus der Fehlermeldung hervor, wenn Du die letzten Zeilen auch gepostet Hättest.
Gruß
Dookie
Code: Alles auswählen
import pickle
Daten={"Text":"Ein Testtext"}
FileHandle = open("TestDatei.bin", 'w')
pickle.dump(Daten, FileHandle)
Code: Alles auswählen
AttributeError: 'dict' object has no attribute 'write'
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
Hab mir gerade mal "Shelve" angesehen, damit funktioniert es:
http://python.org/doc/2.3.4/lib/node76.html
Allerdings ist in den "Restrictions" (http://python.org/doc/2.3.4/lib/node75.html) zu lesen, das gleichzeitige Schreibzugriffe zu Fehlern in der Datenbank führen...
Ich weiß noch nicht, ob das bei mir wirklich vorkommen könnte... Ich will eigentlich damit auf dem Server Login-Daten abspeichern. Somit ist die Gefahr doch groß, das evtl. gleichzeitig mehr als ein Login stattfindet...
Nur, eine richtige SQL-Datenbank zu verwenden ist mir zu hoch...
Doch was passiert genau, wenn bei Shelve ein gleichzeitiger Schreibzugriff erfolgen würde? Ist die Datenbankdatei dann gleich Müll?
http://python.org/doc/2.3.4/lib/node76.html
Allerdings ist in den "Restrictions" (http://python.org/doc/2.3.4/lib/node75.html) zu lesen, das gleichzeitige Schreibzugriffe zu Fehlern in der Datenbank führen...
Ich weiß noch nicht, ob das bei mir wirklich vorkommen könnte... Ich will eigentlich damit auf dem Server Login-Daten abspeichern. Somit ist die Gefahr doch groß, das evtl. gleichzeitig mehr als ein Login stattfindet...
Nur, eine richtige SQL-Datenbank zu verwenden ist mir zu hoch...
Doch was passiert genau, wenn bei Shelve ein gleichzeitiger Schreibzugriff erfolgen würde? Ist die Datenbankdatei dann gleich Müll?
Hi. Ich habe keine Ahnung, was dann passiert. Du kannst auf jeden Fall die Dateien locken, wie dies mit flock gehen würde. Ich habe dazu früher unter win/lin das Modul portalocker benutzt. Wenn du aber nur einfach Daten speichern willst, so kannst du das auch wie oben beschrieben machen, die "Risiken", dass ein anderes Programm auf die Dateien genau dann zugreift, wenn du sie geöffnet hast sind die gleichen wie immer beim hantieren mit Dateien.
-
- User
- Beiträge: 728
- Registriert: Sonntag 22. September 2002, 08:32
- Wohnort: Sauerland
- Kontaktdaten:
Hmm, nur mal so eine Idee. Unter Linux gibt es einen Dienst SYSLOG. Gibt es soetwas nicht auch unter Windows? Dann würdest du diesem Dienst deine zu protollierenden Strings übergeben und den Rest macht das System, egal wieviele Logins gerade da sind, denn es schreibt ja nur SYSLOG.
Das Pythonmodul syslog ist leider nur für Unixe. Aber vielleicht bringt es ja jemanden auf eine Idee.
Hans
Das Pythonmodul syslog ist leider nur für Unixe. Aber vielleicht bringt es ja jemanden auf eine Idee.
Hans
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Wenn es nur darum geht Dictionaries in Strings und zurück zu bekommen, dafür hab ich mir ein eigenes kleines Pickle geschrieben.Milan hat geschrieben:Pickle bzw Shelve könnte noch was für dich sein.
Pickle.dumbs() bläht die Daten etwas mehr auf als meine Variante:
Code: Alles auswählen
def PickleDict(dict):
# "\x00" -> chr(0) -> ASCII(0) - NUL
# "\x01" -> chr(1) -> ASCII(1) - SOH
Pickled=""
for i in dict:
Pickled+="\x00"+i+"\x01"+dict[i]
return Pickled
def UnPickleDict(Pickled):
dict={}
for i in Pickled[1:].split("\x00"):
temp=i.split("\x01")
dict[temp[0]]=temp[1]
return dict
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Beim meinem pyWeb Modul habe ich die Sessions in Form eines Dict so gespeichert und geladen:
Quick and Dirty Methode
Code: Alles auswählen
#speichern
file("bla.txt", "w").write(str(liste));
#lesen
liste = eval(file("bla.txt").read());
TUFKAB – the user formerly known as blackbird