Seite 1 von 1
Datei in Liste auslesen, und Liste in Datei schreiben
Verfasst: Dienstag 29. August 2006, 12:44
von Nobody/Niemand
Eine Frage, die euch vollprofis wahrscheinlich 30s beschäftigen wird, mich jedoch...
Also:
Wie kann ich eine Datei (*.txt) in eine Liste auslesen, und die (evtl. geänderte) Liste nach beenden des Durchlaufs wieder in die Datei zurückschreiben?
Hintergrund:
Es geht um eine, vom Benutzer editierbare (der User kann Worte hinzufügen) Liste, die verschiedene, Wörter beeinhaltet, die alle die gleiche Beduetung haben. Der Grund dafür ist egal, es geht nur um den Befehl. Ich hoffe, ich habe mich verständlich ausgedrückt...
Gruß,
Nobody
P.S.:
hi @ all...
Verfasst: Dienstag 29. August 2006, 12:51
von Nirven
Wie stehen die Wörter denn in der Liste, bzw., wodurch sind sie voneinander getrennt? Bei einer Liste mit einem Zeichen zur Trennung (',' oder ';' als Beispiel) empfiehlt sich das modul csv.
Wenn jedes Wort in einer Zeile steht, eine Datei wird eh Zeilenweise ausgelesen. Dann musst du nur jede Zeile an die Liste anhängen.
Verfasst: Dienstag 29. August 2006, 13:07
von Nobody/Niemand
Jede Zeile ein Wort.
Und nenne bitte die BEfehle...
/edit
Jaja noob-Frage
Verfasst: Dienstag 29. August 2006, 13:43
von pr0stAta
Generell empfiehlt sich folgender Weg:
Datei öffnen
Datei lesen
Datei schließen
Gelesene Daten bearbeiten
Neue Datei erstellen
Daten in die neue Datei schreiben und schließen
ggf alte Datei löschen. So würde ich es jedenfalls machen
Kleines Beispiel(nicht so schön aber funktioniert)
Code: Alles auswählen
'''
bla.txt sieht so aus:
test1
test1
test1
test888888888
test888888888
'''
out = file("bla.txt", "r")
content = out.readlines()
out.close()
clean_content = [item for item in content if item != "test1\n"]
into = file("test_test.txt", "w")
into.write("".join(clean_content))
into.close()
Dieses Beispiel macht genau den oben beschriebenen Teil.
Es überprüft jeden Eintrag in der Liste(oder wie in diesem Fall, also jede Zeile) ob sie den Text "test1\n" enthält, wenn dies der Fall ist, wird dieser
Eintrag übersprungen. In der "test_test.txt" steht also:
test888888888
test888888888
Verfasst: Dienstag 29. August 2006, 13:44
von Nirven
Code: Alles auswählen
f = open('PfadUndDateiname','r')
l = []
for i in f:
l.append(i)
f.close()
Fertig gelesen, an den Wörtern hängt dann immer noch ein Zeilenumbruch. Musst du eventuell abschneiden, wenn er stört.
Zum schreiben:
Code: Alles auswählen
f = open('PfadUndDateiname','w')
l = ['Wort1\n','Wort2\n','Wort3\n']
for i in l:
f.write(i)
f.close()
Sollte so gehen. Wenn du die Zeilenumbrüche abgeschnitten hast musst du sie vor dem Schreiben wieder anfügen.[/code]
Verfasst: Dienstag 29. August 2006, 13:57
von gerold
...meine Beispiele sind einfach zu lang.
Während ich ein Beispiel schreibe, haben schon zwei andere Mitglieder geantwortet.
Damit ich es nicht umsonst geschrieben habe:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import os.path
FILENAME = "irgendeinname.txt"
def read_wordlist(filename = FILENAME):
"""
Liest die übergebene Datei aus und gibt eine Liste mit den Wörtern
zurück. (ohne Zeilenumbrüche am Ende)
:param filename: Dateiname der Datei
:return: Wortliste oder leere Liste, wenn Datei nicht existiert oder
kein Wort in der Datei stand.
"""
try:
f = file(filename, "r")
except IOError:
return []
try:
wordlist = [ word.strip() for word in f if word ]
finally:
f.close()
return wordlist
def write_wordlist(wordlist, filename = FILENAME):
"""
Schreibt die Wörter in die angegebene Datei.
:param wordlist: Wortliste (ohne Zeilenumbruch am Ende)
:return: True, wenn alles OK.
"""
f = file(filename, "w")
try:
f.writelines([ word + "\n" for word in wordlist ])
finally:
f.close()
return True
def main():
"""
Hauptprozedur
"""
# Lesen
wordlist = read_wordlist()
# Anzeigen und neuen Eintrag hinzufügen
print wordlist
wordlist.append("Hallo")
# Schreiben
write_wordlist(wordlist)
if __name__ == "__main__":
main()
mfg
Gerold
Verfasst: Dienstag 29. August 2006, 14:08
von Nirven
gerold hat geschrieben:
Während ich ein Beispiel schreibe, haben schon zwei andere Mitglieder geantwortet.
Dafür ist es die Luxusvariante
Und ich habe gelernt das strip() auch ohne Argument funktioniert (sogar "besser" für meine Wünsche
)
Verfasst: Dienstag 29. August 2006, 14:09
von Nobody/Niemand
Danke, Leute!
Ich test's mal, und editier dann eventuelle Neu auftauchende Fragen hier rein.
Gruß,
Nobody
/edit
Danke sehr, ihr habt mir sehr geholfen....