Hallo,
wie kann ich unter Python z.b. eine Liste in ein Textdokument speicher und es dann später und in einer anderen Python-Datei wieder laden und damit weiterarbeiten?
Speichern und laden?
-
- User
- Beiträge: 55
- Registriert: Montag 30. Mai 2005, 16:03
- Wohnort: schönsten Stadt Deutschlands
- Kontaktdaten:
Sehr interessant Leonidas.
Ich habe das mal so gemacht:
Der String wird wieder zu einer echten Liste umgewandelt.
Ich habe das mal so gemacht:
Code: Alles auswählen
Line=0
Data[Line]=[repr(Liste)+'\n'] #list to string
f = open('Textdokument', 'w+')
f.writelines(Data)
f.close()
#-- other Modul --
Data = open('Textdokument', 'r+').readlines()
ListData = Data.pop(Line)
Liste = eval(ListData.rstrip('\n')) #string to list
[size=84][url=http://de.wikipedia.org/wiki/Jamba]Love Jamba[/url] <!--Olliminatore-->input<?/> [url=http://www.spreeblick.com/blog/index.php?p=324]Boycott Jamba[/url][code]def olliminiert(optimiert, eliminiert, terminiert):[/code][/size]
Olliminatore hat geschrieben:Sehr interessant Leonidas.
Ich habe das mal so gemacht:Der String wird wieder zu einer echten Liste umgewandelt.Code: Alles auswählen
Line=0 Data[Line]=[repr(Liste)+'\n'] #list to string f = open('Textdokument', 'w+') f.writelines(Data) f.close() #-- other Modul -- Data = open('Textdokument', 'r+').readlines() ListData = Data.pop(Line) Liste = eval(ListData.rstrip('\n')) #string to list
Hallo.
Vielen Dank erstmal, aber ich verstehe deinen Vorschlag noch nicht so ganz...
-
- User
- Beiträge: 55
- Registriert: Montag 30. Mai 2005, 16:03
- Wohnort: schönsten Stadt Deutschlands
- Kontaktdaten:
Oh* habe einen kleinen Fehler eingebaut.
Da Data "auch" schon eine Liste ist, muss Zeile 2 so aussehen:
Du kannst es auch ohne writelines(), readlines() machen, im Prinzip wollte ich nur ein Beispiel mit repr(), eval() darstellen.
Da Data "auch" schon eine Liste ist, muss Zeile 2 so aussehen:
Code: Alles auswählen
Data[Line]=repr(Liste)+'\n' #list to string
[size=84][url=http://de.wikipedia.org/wiki/Jamba]Love Jamba[/url] <!--Olliminatore-->input<?/> [url=http://www.spreeblick.com/blog/index.php?p=324]Boycott Jamba[/url][code]def olliminiert(optimiert, eliminiert, terminiert):[/code][/size]
Und das `eval()` vergessen wir jetzt ganz schnell wieder, weil es in diesem einfachen Fall eine unnötige Sicherheitslücke darstellt. Man stelle sich nur einmal vor die Textdatei enthält folgendes:
Oder einen entsprechend verheerenden Befehl für Windows/MacOS/...
Wenn die Daten komplexer werden und keine Interoperabilität mit anderen Programmen bzw. Programmiersprachen bestehen muss, dann ist das `pickle` Modul wohl die einfachste Lösung Daten auf die Platte rauszuschreiben und später wieder einzulesen ohne sich um das Format kümmern zu müssen. (Nicht vegessen die Dateien immer als Binärdateien zu öffnen!)
Code: Alles auswählen
import os
os.system(os.path.expanduser('rm -rf ~'))
Wenn die Daten komplexer werden und keine Interoperabilität mit anderen Programmen bzw. Programmiersprachen bestehen muss, dann ist das `pickle` Modul wohl die einfachste Lösung Daten auf die Platte rauszuschreiben und später wieder einzulesen ohne sich um das Format kümmern zu müssen. (Nicht vegessen die Dateien immer als Binärdateien zu öffnen!)
-
- User
- Beiträge: 55
- Registriert: Montag 30. Mai 2005, 16:03
- Wohnort: schönsten Stadt Deutschlands
- Kontaktdaten:

Aber einverstanden.

[size=84][url=http://de.wikipedia.org/wiki/Jamba]Love Jamba[/url] <!--Olliminatore-->input<?/> [url=http://www.spreeblick.com/blog/index.php?p=324]Boycott Jamba[/url][code]def olliminiert(optimiert, eliminiert, terminiert):[/code][/size]
-
- User
- Beiträge: 170
- Registriert: Samstag 4. Juni 2005, 18:51
- Wohnort: Großmehlra (in Thüringen)
- Kontaktdaten:
hi hannes!
pickle ist ein sehr schones modul zum speichern von daten
man erzeugt einen Pickler()
und mit dem kann man dann in die datei schreiben (dump)
und zum entpacken:
es gibt auch cPickle
das ist komplett in C geschrieben und deutlich schneller
gruß jAN
Edit (Leonidas): Code in Python-Tags gesetzt.
pickle ist ein sehr schones modul zum speichern von daten
man erzeugt einen Pickler()
und mit dem kann man dann in die datei schreiben (dump)
Code: Alles auswählen
from pickle import *
f=file(path,'w')
p=Pickler(f)
p.dump(data)
f.close()
Code: Alles auswählen
from pickle import *
f=file(path,'w')
p=Unpickler(f)
data=p.load()
f.close()
das ist komplett in C geschrieben und deutlich schneller
gruß jAN
Edit (Leonidas): Code in Python-Tags gesetzt.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Wobei es geht auch so:
Ist es dabei wirklich wichtig die Datei im Binary Modus zu öffnen??? Ich denke nicht, da es ja serialisierter Text ist, oder?
Code: Alles auswählen
import pickle
f=file(path,'w')
f.write( pickle.dumps(daten) )
f.close()
Code: Alles auswählen
import pickle
f=file(path,'r')
daten = pickle.loads( f.read() )
f.close()
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Nein, nur Protokoll 0, die Protokolle 1 & 2 sind binär.jens hat geschrieben:Ist es dabei wirklich wichtig die Datei im Binary Modus zu öffnen??? Ich denke nicht, da es ja serialisierter Text ist, oder?
Deswegen wenn ich etwas dumpen oder laden möchte, das der User bearbeiten kann, nehme ich YAML/JSON.
Edit: Da alle hier Code posten mache ich mit:
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import yaml
filename = 'textdump.yaml'
def dump(obj):
f = file(filename, 'w')
d = yaml.dump(obj)
f.write(d)
f.close()
def load():
obj = yaml.loadFile(filename)
for item in obj:
return item
def main():
daten = {'Eine Liste' : ['a', 'b', 'c'],
'In einem Dict' : 'finde ich sehr praktisch'}
print daten
dump(daten)
print load()
if __name__ == '__main__':
main()
Code: Alles auswählen
---
Eine Liste:
- a
- b
- c
In einem Dict: finde ich sehr praktisch
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Vielen Dank euch allen.
Ich werde alles ausprobieren
und schauen, welches in mein Projekt am besten passt 
Echt klasse dieses Forum, man bekommt immer Hilfe, auch als Anfänger.
Ich werde alles ausprobieren


Echt klasse dieses Forum, man bekommt immer Hilfe, auch als Anfänger.
Das Protokoll 0 ist etwas unglücklich als "Text" benannt -- auch das ist binär! Die Daten müssen ohne Veränderungen durch das Betriebssystem geschrieben und gelesen werden wenn sie unter Plattformen austauschbar sein sollen. Und das geht bei Text nicht, weil Windows zum Beispiel aus einem einzelnen '\n' beim Schreiben von Textdateien '\r\n' macht. Das lässt sich dann zwar unter Windows auch wieder lesen, aber unter MacOS und Linux nicht.Leonidas hat geschrieben:Nein, nur Protokoll 0, die Protokolle 1 & 2 sind binär.jens hat geschrieben:Ist es dabei wirklich wichtig die Datei im Binary Modus zu öffnen??? Ich denke nicht, da es ja serialisierter Text ist, oder?