ok, danke, wie kann ich den bestimmt wörter in einer .txt datei löschen ?
finde da irgendwie nix dazu. nur wie man rein schreibt, oder sie sonst bearbeitet, nur wie man elemente in einer .txt datei löscht find ich nirgends was dazu.
Oder sollte ich die FIlme in einer Liste[] in einer .py datei spreichern ?
Erstellen einer Filmdatenbank
Wenn du schon Python-Objekte speichern willst, solltest du Pickle o. ä. benutzen.
- Du schließt die Datei nicht, falls der Titel nicht in der Datei gefunden werden sollte.
- Der Titel kann in der Datei gar nicht gefunden werden, da alle Zeilen mit einem \n enden, und du deswegen ein Newline-Zeichen an den Titel anhängen müsstest, damit es so funktioniert wie du es willst.
- Wenn du eine Datei bearbeiten willst, musst du entweder den Modus „a“ benutzen, damit du Zeilen anhängen kannst, oder den Modus „w“ benutzen, mit dem du allerdings die ganze Datei neu schreiben musst.
hey cool, danke für den tipp mit pickle, gerade bissl eingelesen und ich finds echt praktisch.
Nur finde ich auch hier z.b. Galileo Crap-Book, oder Wikibook nichts zum elemente entfernen mit pickel, aber erst ma weiter suchen, gibt ja nicht nur Galileo "was eh nicht die beste wahl ist" und das wikibook.
Und erstmal mit pickel meine datenbank umschreiben
Nur finde ich auch hier z.b. Galileo Crap-Book, oder Wikibook nichts zum elemente entfernen mit pickel, aber erst ma weiter suchen, gibt ja nicht nur Galileo "was eh nicht die beste wahl ist" und das wikibook.
Und erstmal mit pickel meine datenbank umschreiben

Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
Du liest deine Pickle-Datei ein (in der du eine Liste speicherst), löschst den Filmtitel aus der Liste, und schreibst deine Liste wieder in die Datei …smodo hat geschrieben:hey cool, danke für den tipp mit pickle, gerade bissl eingelesen und ich finds echt praktisch.
Nur finde ich auch hier z.b. Galileo Crap-Book, oder Wikibook nichts zum elemente entfernen mit pickel, aber erst ma weiter suchen, gibt ja nicht nur Galileo "was eh nicht die beste wahl ist" und das wikibook.
Und erstmal mit pickel meine datenbank umschreiben
also, langsam komm ich nicht mehr nach, bin halt auch noch neuling... 
Ich habe eine filme.pkl datei, in der steht nur:
filme = []
die funktion um filme hinzfügen:
ich weiss nicht wie ich direkt in die liste der .pkl datei direkt was zufügen kann, logischerweise steht am schluss in der filme.pkl:
also ich weiss schon liste.append() und so, nur halt wie mit pickle und der datei verbinden nicht.

Ich habe eine filme.pkl datei, in der steht nur:
filme = []
die funktion um filme hinzfügen:
Code: Alles auswählen
def film_hinzu(titel):
output = open("filme.pkl", "a")
pickle.dump(titel, output)
output.close()
Code: Alles auswählen
filme = []
S'Batman'
p0
.
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
@smodo: Das ``filme = []`` hat in der Datei nichts zu suchen, damit kann `pickle` nichts anfangen. Vergiss einfach mal das Du an den Dateien etwas ändern kannst. Das vorgehen ist: Einlesen, Datenstruktur verändern, Datei neu schreiben. Bei der Datei nichts anhängen, löschen, oder verändern wollen.
Ich denke du musst die Datei erst auslesen, dann deinen Datensatz anhängen und anschließend wieder speichern.
Evtl. kannst du dir mal shelve anschauen. Das entspricht vielleicht eher deinen Vorstellungen. Allerdings macht das auch nur dann Sinn, wenn du zu dem Filmtitel weitere Attribute abspeichern möchtest (Genre, Schauspieler, Jahr etc.).
Code: Alles auswählen
def film_hinzu(title):
with open('data.pkl', 'rb') as pickle_file:
movie_list = pickle.load(pkl_file)
movie_list.append(title)
with open('data.pkl', 'wb') as output:
pickle.dump(movie_list, output)
das ist aber eine sehr gute idde, mit genre und co.
jo ich melde mich morgen nochmal, anscheinend gibt es viel zu lesen noch 
Hat jetzt gute ansätze, so dann ma ran an die arbeit


Hat jetzt gute ansätze, so dann ma ran an die arbeit

Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Und was kann `shelve`, was pickle nicht kann? Letztlich kann man dann auch noch `json` in den Raum werfen - dann macht man sich von Python unabhängig.
Wichtig ist das doch erst einmal das generelle Verständnis, dass man Daten nur im Speicher manipuliert und nicht direkt an der Quelle der Persistenz. Genau dafür gibt es ja solche Persistenz-Module.
Wichtig ist das doch erst einmal das generelle Verständnis, dass man Daten nur im Speicher manipuliert und nicht direkt an der Quelle der Persistenz. Genau dafür gibt es ja solche Persistenz-Module.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
habs grad mal mit:
probiert.
und ja ich habs jetzt verstanden, ich kann an der quelle nicht rumpfuschen, ich kann nur eine "kopie" machen, die bearbeiten und dann neu in die quelle einfügen.
Code: Alles auswählen
def film_hinzu(titel):
with open("filme.pkl", "rb") as pkl_file:
movie_list = pickle.load(pkl_file)
movie_list.append(titel)
with open("filme.pkl", "wb") as output:
pickle.dump(movie_list, output)
Code: Alles auswählen
Film Hinzufügen: Batman
Traceback (most recent call last):
File "filbi.py", line 84, in <module>
main()
File "filbi.py", line 69, in main
film_hinzu(titel)
File "filbi.py", line 12, in film_hinzu
movie_list = pickle.load(pkl_file)
File "/usr/lib/python2.7/pickle.py", line 1378, in load
return Unpickler(file).load()
File "/usr/lib/python2.7/pickle.py", line 858, in load
dispatch[key](self)
KeyError: '\n'
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
@Hyperion
Es vereinfacht die 'Persitenzhaltung' für dictionaries. Daher auch der Hinweis mit weiteren Attributen.
@smodo
Kann es sein das du in die *.pkl Datei noch das von vorher stehen hast?
Entferne am besten die Datei. Wenn du dein Script startest und die Datei noch nicht existiert, dann musst du sie eben erstellen. Entweder gleich beim Start oder erst bei Bedarf.
Da shelve auf pickle aufbaut, behaupte ich einfach mal: es kann nicht mehr.Hyperion hat geschrieben:Und was kann `shelve`, was pickle nicht kann?
Es vereinfacht die 'Persitenzhaltung' für dictionaries. Daher auch der Hinweis mit weiteren Attributen.
@smodo
Kann es sein das du in die *.pkl Datei noch das von vorher stehen hast?
Code: Alles auswählen
filme = []
S'Batman'
p0
.
nene die war total leer, nur filme = [], stand drinnen.
Aber ich machs jetzt mit einer .txt wieder und ohne pickle, es gab mit zu strange fehler aus, wo ich evtl, alles nochmal schreiben muss und sorry das wäre zuviel.... von wegen KeyError "\n" ...
Ich mache jetzt einfach die funktion so, das sie den inhalt der .txt in eine liste packt und nachher bestimmte elemente lösche und dann mit der aktuellen liste, die datei überschreiben... fertig 
Aber ich machs jetzt mit einer .txt wieder und ohne pickle, es gab mit zu strange fehler aus, wo ich evtl, alles nochmal schreiben muss und sorry das wäre zuviel.... von wegen KeyError "\n" ...


Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Hu? Dann benutzt Du `pickle` sicherlich falsch!smodo hat geschrieben: Aber ich machs jetzt mit einer .txt wieder und ohne pickle, es gab mit zu strange fehler aus, wo ich evtl, alles nochmal schreiben muss und sorry das wäre zuviel.... von wegen KeyError "\n" ...![]()
Ich kann verstehen, dass man nicht `pickle` nutzen will, aber wieso willst Du ein eigene Textformat nutzen? Oder verwendest Du jetzt einen (anderen) Standard?smodo hat geschrieben: Ich mache jetzt einfach die funktion so, das sie den inhalt der .txt in eine liste packt und nachher bestimmte elemente lösche und dann mit der aktuellen liste, die datei überschreiben... fertig
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
hmm irgendiwe denke ich es zu einfach...
funktioniert nicht ganz...
Es gibt an den Film nicht zu finden, löscht aber alles und überschreibt mir die datei 
hmm nein nein pickel ist ja schon gut und recht, das sicherlich, aber ich habs nach vorgabe genutzt und es kammen immer KeyError entweder "\n" oder "A" und sonstiges.
Edit, so ist es aktuell, geht aber immer noch nicht, ich glaub ich schmeiss mein pc gleich zum fenster raus
funktioniert nicht ganz...


Code: Alles auswählen
def film_del(titel):
datei = open("filme.txt", "a+")
make_in = []
for element in datei:
make_in.append(element)
if titel in make_in:
del make_in[title]
datei.write(make_in)
datei.close()
else:
print "Nicht vorhanden. "
datei.close()
Edit, so ist es aktuell, geht aber immer noch nicht, ich glaub ich schmeiss mein pc gleich zum fenster raus

Zuletzt geändert von smodo am Mittwoch 21. Dezember 2011, 15:12, insgesamt 1-mal geändert.
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
Du kannst nicht einfach 'filme = []' in diese Datei schreiben.smodo hat geschrieben:nene die war total leer, nur filme = [], stand drinnen.
Vielleicht solltest du mal folgendes versuchen. Beim starten deines Scriptes alle abgespeicherten Filme laden:
Code: Alles auswählen
import os
import pickle
def load_movie_data(filename):
"""
Load a movie-list from a pickled file.
"""
if os.path.exists(filename):
#wenn die Datei existiert, dann Filmliste aus Datei laden
with open(filename, 'rb') as pickle_file:
return pickle.load(pickle_file)
else:
#wenn die Datei nicht existiert, dann leere Liste
return []
Code: Alles auswählen
def save_movie_data(filename, movie_list):
"""
Pickle a movie-list.
"""
with open(filename, 'wb') as output:
pickle.dump(movie_list, output)
Code: Alles auswählen
filename = 'movies.pkl'
movie_data = load_movie_data(filename)
modified_movie_data = do_something(movie_data)
save_movie_data(filename, modified_movie_data)
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Das kann nicht funzen! Schau Dir mal Deine Datei an... da steht sicherlich nicht das drin, was Du vorher drin stehen hattest.
Nebenbei öffnet man Dateien so:
Damit ist sicher gestellt, dass die Datei immer geschlossen wird.
Nebenbei öffnet man Dateien so:
Code: Alles auswählen
with open() as handler:
# handler ist hier file-Object
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
hey cool, danke, aber muss ehrlich sein, ich habe mein scheiss dingens komplet gelöscht, bin da irgendwie falsch ran, werde es nach deinem schema machen, was übersichtlicher ist und auch sehr logisch aufgebaut...
War meins zwar auch, also alle funktionen zusammen und ein Gerüst aber anscheinend hatte ich viel zu viel unnötiger text...
with open() as blabla:
ist gemerkt und notiert. !
War meins zwar auch, also alle funktionen zusammen und ein Gerüst aber anscheinend hatte ich viel zu viel unnötiger text...

with open() as blabla:
ist gemerkt und notiert. !
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.