Hallo ich habe eine Frage,
ich möchte ein Modul erstellen, bei dem bestimmte Daten in einer pickle-Datei hinterlegt sind und die dannvom Modul geladen werden. Wenn das Modul im python-Pfad liegt, wird dieses bei jedem Pythonaufruf leicht gefunden und kann geladen werden. Mit der pickle-Datei verhält es sich aber anders. Wie kann ich erreichen, dass diese auch immer geladen wird, ohne dass ich einen absoluten Dateipfad angeben muss?
Danke für Eure Hilfe!
modul mit pickle-datei
-
- User
- Beiträge: 65
- Registriert: Dienstag 4. März 2014, 12:04
Sorry,
meine suche nach __file__ oder auch "__file__" ergibt über 150000 Treffer und meistens ging es da um "file", nicht aber um die variable __file__.
Vielleicht könnt ihr mir helfen, wenn ich dieses kleine Beispiel eingebe.
Also, die Quelldatei, in der die Daten drinstehen:
Wenn ich das modul von dem Verzeichnis aus lade, wo ich gerade bin, geht es, sonst nicht.
meine suche nach __file__ oder auch "__file__" ergibt über 150000 Treffer und meistens ging es da um "file", nicht aber um die variable __file__.
Vielleicht könnt ihr mir helfen, wenn ich dieses kleine Beispiel eingebe.
Also, die Quelldatei, in der die Daten drinstehen:
Code: Alles auswählen
#!/usr/bin/env python3
import pickle
FILE = open("test.pkl","wb")
obj_1 = "Zürich Basel Genf".split()
obj_2 = "Berlin Hamburg München".split()
pickle.dump(obj_1, FILE)
pickle.dump(obj_2, FILE)
FILE.close()
Code: Alles auswählen
Das eigentliche Modul:
#!/usr/bin/env python3
import pickle
FILE = open("test.pkl","rb")
obj_1 = pickle.load(FILE)
obj_2 = pickle.load(FILE)
Ist dir bestimmt schon mehrfach gesagt worden: Dateien oeffnet (und schliesst implizit) mit dem with-statement, und KONSTANTENT schreibt man gross, und auf Modulebene gehoert kein Code, sondern nur Konstanten, Funktions + Klassendeklarationen.
Code: Alles auswählen
import pathlib
import pickle
BASE = pathlib.Path(__file__).parent.absolute()
PICKLE_FILE = BASE / "test.pickle"
def load_local_pickle():
with PICKLE_FILE.open("rb") as inf:
return pickle.load(inf)
def write_local_pickle(data):
with PICKLE_FILE.open("wb") as outf:
pickle.dump(data, outf)
def main():
write_local_pickle({"hallo": "welt"})
print(load_local_pickle()["hallo"])
if __name__ == '__main__':
main()
-
- User
- Beiträge: 65
- Registriert: Dienstag 4. März 2014, 12:04
Sorry, nein, das ist mir noch nicht gesagt worden, danke für den Tipp!
-
- User
- Beiträge: 65
- Registriert: Dienstag 4. März 2014, 12:04
Nur dass ich es richtig verstehe: Funktionsdeklarationen sind nicht die Definitionen der Funktion selbst, sondern so eine Art Mitteilung, dass es diese oder jene Funktion gibt, die irgendwo anders steht. Habe ich das richtig verstanden?
-
- User
- Beiträge: 65
- Registriert: Dienstag 4. März 2014, 12:04
Eine Klasse ist dann z.B. eine Datensammlung oder eine Konstante, wie pi oder etwas in der art?
Eine Klasse ist eine Klasse. Sie hat normalerweise keinen veränderlichen Zustand, wobei es da in seltenen Fällen Ausnahmen gibt. Eine *Instanz* einer Klasse ist ein Objekt, und das hat üblicherweise Zustand, und Code, der darauf operiert.
-
- User
- Beiträge: 65
- Registriert: Dienstag 4. März 2014, 12:04
Was ich noch nicht vertehe:
wozu ist der Code
gut?
wozu ist der Code
Code: Alles auswählen
def main():
write_local_pickle({"hallo": "welt"})
print(load_local_pickle()["hallo"])
if __name__ == '__main__':
main()
-
- User
- Beiträge: 65
- Registriert: Dienstag 4. März 2014, 12:04
Jetzt wüsste ich noch gerne folgendes:
Wenn ich die Datei, die die Pickle-Datei erzeugt lade, dann wird diese Datei jedesmal neu erzeugt, richtig?
Wenn ich auf die Variablen der Pickle-Datei zugreifen möchte, ohne dass diese jedesmal neu erzeugt wird, wie kann ich dies erreichen?
Danke für alle Tipps!
Wenn ich die Datei, die die Pickle-Datei erzeugt lade, dann wird diese Datei jedesmal neu erzeugt, richtig?
Wenn ich auf die Variablen der Pickle-Datei zugreifen möchte, ohne dass diese jedesmal neu erzeugt wird, wie kann ich dies erreichen?
Danke für alle Tipps!