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...
Datei in Liste auslesen, und Liste in Datei schreiben
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.
Wenn jedes Wort in einer Zeile steht, eine Datei wird eh Zeilenweise ausgelesen. Dann musst du nur jede Zeile an die Liste anhängen.
-
- User
- Beiträge: 3
- Registriert: Dienstag 29. August 2006, 12:36
Jede Zeile ein Wort.
Und nenne bitte die BEfehle...
/edit
Jaja noob-Frage
Und nenne bitte die BEfehle...
/edit
Jaja noob-Frage
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)
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
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()
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
Zuletzt geändert von pr0stAta am Dienstag 29. August 2006, 13:45, insgesamt 1-mal geändert.
Code: Alles auswählen
f = open('PfadUndDateiname','r')
l = []
for i in f:
l.append(i)
f.close()
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()
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
...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:
mfg
Gerold
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()
Gerold
Zuletzt geändert von gerold am Dienstag 29. August 2006, 14:21, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Dafür ist es die Luxusvariantegerold hat geschrieben: Während ich ein Beispiel schreibe, haben schon zwei andere Mitglieder geantwortet.
Und ich habe gelernt das strip() auch ohne Argument funktioniert (sogar "besser" für meine Wünsche )
-
- User
- Beiträge: 3
- Registriert: Dienstag 29. August 2006, 12:36
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....
Ich test's mal, und editier dann eventuelle Neu auftauchende Fragen hier rein.
Gruß,
Nobody
/edit
Danke sehr, ihr habt mir sehr geholfen....