Hallo Jungs,
ich bin in Python noch ein ziemlicher Newbie muss jedoch sagen, dass mir die Programmiersprache zusagt. Daher habe ich nun eine Frage, welches Modul ist am besten dazu geeignet mit Textdateien zu arbeiten.
Ich möchte genauer gesagt eine ganze Textdatei einlesen um sie dann als einen String zu verwalten. Des weiteren möchte ich am Ende eine Zeile anfügen.
Wär nicht schlecht wenn ihr mir helfen könntet, am besten mit Bsp. Quellcode
Textdateien bearbeiten
- strogon14
- User
- Beiträge: 58
- Registriert: Sonntag 23. Februar 2003, 19:34
- Wohnort: Köln
- Kontaktdaten:
Dafür brauchst Du kein Modul. Python kann von Haus aus wunderbar mit Dateien und Strings umgehen.
Z.B. eine Datei komplett in einen String einlesen:
's' enthält jetzt den kompletten Inhalt der Datei inklusive aller Zeilenendezeichen.
Willst du die einzelnen Zeilen bearbeiten, ist es sinnvoll die Zeilen einer Textdatei in eine Liste von Strings einzulesen:
'l' ist jetzt eine Liste von Strings, die jeweils mit newline (unter Unix) abgeschlossen sind.
Willst du eine Zeile an die Datei anfügen, geht das auch ganz leicht:
Beantwortet das Deine Frage?
Z.B. eine Datei komplett in einen String einlesen:
Code: Alles auswählen
f = open('datei.txt')
s = f.read()
Willst du die einzelnen Zeilen bearbeiten, ist es sinnvoll die Zeilen einer Textdatei in eine Liste von Strings einzulesen:
Code: Alles auswählen
f = open('datei.txt')
l = f.readlines()
Willst du eine Zeile an die Datei anfügen, geht das auch ganz leicht:
Code: Alles auswählen
f = open('datei.txt')
l = f.readlines()
f.close()
l.append('Eine neue Zeile\n')
f = open('datei,txt', 'w') # Datei in Schreibmodus oeffnen.
# Achtung: alter Inhalt wird geloescht
f.write("".join(l)) # Strings in Liste wieder zusammenfügen
# und in Datei schreiben
f.close()
Und falls du nix am bisherigen Dateiinhalt ändern willst, sondern nur an eine Datei etwas anfügen willst, kannst du die Datei auch in Anfügemodus öffnen und dann reinschreiben:
@strogon: es gibt auch ne Funktion writelines, die die Liste String für String in die Datei schreibt

Code: Alles auswählen
f=open('textdatei.txt','a') #das a sorgt für den Anfügemodus beim öffnen
f.write('Dies ist eine weitere Zeile\n') #´Damit schreibst du eine neue Zeile hinten an die Datei dran, das "\n" ist das Zeilenende (Newline)
f.close() #und die Datei wieder schließen


Danke Leute,
hat richtig gut gefunzt.
Ich habe nur ein Problem,
wenn ich die Datei einlesen will, muss ich stets den ganzen Pfad angeben.
Geht das nicht auch universeller, so dass, wenn die Textdatei schon im gleichen Verzeichnis ist, diese auch einfach per Namen aufgerufen werden kann. Wenn ich das versuche, gibt er mir immer aus das die Datei nicht gefunden wurde.
hat richtig gut gefunzt.
Ich habe nur ein Problem,
wenn ich die Datei einlesen will, muss ich stets den ganzen Pfad angeben.
Geht das nicht auch universeller, so dass, wenn die Textdatei schon im gleichen Verzeichnis ist, diese auch einfach per Namen aufgerufen werden kann. Wenn ich das versuche, gibt er mir immer aus das die Datei nicht gefunden wurde.
Das geht genauso wie du das willst, aber ich nehme mal an, dass du per IDLE unter win arbeitest. IDLE wird im Pythonverzeichniss gestartet und somit denkt Python dein Script würde dort liegen. Wenn du Python aber direkt dein Script ausführen lässt (wenn es unter win ist, sollten .py-Dateien mit dem Interpreter verknüpft sein, also einfach drauf doppelklicken) ist der aktuelle Pfad der deines Scriptes. Dann geht das auch mit den finden von Dateien.
Ansosnsten kannst du im Pythonscript den Pfad so ändern:
Ansosnsten kannst du im Pythonscript den Pfad so ändern:
Code: Alles auswählen
import os
os.chdir("d:/a/will/ich/hin")
Hallo Zusammen
nach Suche zu meinem Anliegen im Forum habe ich diesen Faden gefunden. Scheint mir der naheliegendste zu sein.
Ich habe Text-Dateien, die etwas über 100MB groß sind. Nun würde ich in einer Stapelverarbeitung gerne die ersten 5 Zeilen dieser Dateien ändern, ohne den Rest der Zeilen zu verlieren.
mit der option "w" bei f.open() wird ja der ganze Inhalt der Datei gelöscht.
mit der option "a" bei f.open kann man an das Ende der Datei anhängen.
Gibt es denn auch eine Option, um am Anfang der Datei etwas einzufügen ?
Bzw. fällt euch eine andere Möglichkeit ein ?
Muss doch möglich sein, dies über Python zu realisieren..
LG,
Mimu
nach Suche zu meinem Anliegen im Forum habe ich diesen Faden gefunden. Scheint mir der naheliegendste zu sein.
Ich habe Text-Dateien, die etwas über 100MB groß sind. Nun würde ich in einer Stapelverarbeitung gerne die ersten 5 Zeilen dieser Dateien ändern, ohne den Rest der Zeilen zu verlieren.
mit der option "w" bei f.open() wird ja der ganze Inhalt der Datei gelöscht.
mit der option "a" bei f.open kann man an das Ende der Datei anhängen.
Gibt es denn auch eine Option, um am Anfang der Datei etwas einzufügen ?
Bzw. fällt euch eine andere Möglichkeit ein ?
Muss doch möglich sein, dies über Python zu realisieren..
LG,
Mimu
Soweit ich weiß musst du die Datei einlesen, dann bearbeiten und dann wiede rneu schreiben
the more they change the more they stay the same
Auf was antworte ich da?
15.April 2005?
15.April 2005?
the more they change the more they stay the same
Hi David,
danke für die Antwort.
Mein Post ist schon neuer als 2005, ist ne neue Frage zum alten Thema..
Ich habe Tausende dieser 100 MB großen Textdateien, jeweils die komplette Datie zu schreiben ist ein wahnsinniger Rechenaufwand..
Ich hoffe es gibt eine andere Lösung..
LG,
Mimu
danke für die Antwort.
Mein Post ist schon neuer als 2005, ist ne neue Frage zum alten Thema..
Ich habe Tausende dieser 100 MB großen Textdateien, jeweils die komplette Datie zu schreiben ist ein wahnsinniger Rechenaufwand..
Ich hoffe es gibt eine andere Lösung..
LG,
Mimu
Hi! omg... hab so eben eine Antwortbenachrichtigung per email erhalten, das ist ja schon ewig her.
Wenn du einfluss auf das Design der Daten hast, lege es so, dass die 5 Zeilen am Ende der Datei sind. Dann kannst du die Datei mit "r+b" im binären Updatemodus öffnen und mit seek, tell und truncate arbeiten. Hierbei musst du nur noch die letzten 5 Zeilen finden und an den Start springen. Anschließend den Rest mit truncate abschneiden und neu hineinschreiben.
Wenn du keinen Einfluss darauf hast, hast du ein Problem. Dann kannst du zwar auch mit dem Updatemodus öffnen, aber der überschreibt dann nur Daten. Du kannst das also nur anwenden, wenn du Zeichen 1 : 1 ersetzt, damit nach den 5 Zeilen noch alles stimmt und die 5 Zeilen weg sind.
Ansonsten... auslesen, ändern, neu erstellen
mfG Milan
Wenn du einfluss auf das Design der Daten hast, lege es so, dass die 5 Zeilen am Ende der Datei sind. Dann kannst du die Datei mit "r+b" im binären Updatemodus öffnen und mit seek, tell und truncate arbeiten. Hierbei musst du nur noch die letzten 5 Zeilen finden und an den Start springen. Anschließend den Rest mit truncate abschneiden und neu hineinschreiben.
Wenn du keinen Einfluss darauf hast, hast du ein Problem. Dann kannst du zwar auch mit dem Updatemodus öffnen, aber der überschreibt dann nur Daten. Du kannst das also nur anwenden, wenn du Zeichen 1 : 1 ersetzt, damit nach den 5 Zeilen noch alles stimmt und die 5 Zeilen weg sind.
Ansonsten... auslesen, ändern, neu erstellen

mfG Milan
Dafür einen antiken Thread rauszukramen macht eigentlich keinen so guten Eindruck. Besser wäre es, wenn du für deine Fragen eigene Threads eröffnest.mimu hat geschrieben:Mein Post ist schon neuer als 2005, ist ne neue Frage zum alten Thema..
-
- User
- Beiträge: 79
- Registriert: Montag 12. Oktober 2009, 11:50
Zumindest hat die mimu irgendeine Art von Suchmaschine verwendet, das ist schonmal was. 

Danke für die Antworten.
Vor allem an Milan, die hilft mir nämlich tatsächlich weiter
Werde das mal ausprobieren mit dem Updatemodus, bin aber nicht unbedingt guter Dinge, da ich im westenlich aus den ersten Zeilen Zeichen löschen muss, nicht ersetzen..
Ansonsten werde ich mir wohl ne andere Lösung suchen müssen.
Lg,
Der Mimu
PS: werde in Zukunft dann einen neuen Faden eröffnen.. Hätte ich dies gleich gemacht, hätte es bestimmt geheissen: Suchmaschine benutzen
Irgendwas ist ja immer 
Vor allem an Milan, die hilft mir nämlich tatsächlich weiter

Werde das mal ausprobieren mit dem Updatemodus, bin aber nicht unbedingt guter Dinge, da ich im westenlich aus den ersten Zeilen Zeichen löschen muss, nicht ersetzen..
Ansonsten werde ich mir wohl ne andere Lösung suchen müssen.
Lg,
Der Mimu
PS: werde in Zukunft dann einen neuen Faden eröffnen.. Hätte ich dies gleich gemacht, hätte es bestimmt geheissen: Suchmaschine benutzen


- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
du könntest auch die Datei in eine Liste von Strings zeilenweise einlesen, dann kannst du rel. einfach auf jeden beliebige Zeile zugreifen.
Ob das bei 100 MB aber performant oder gar elegant ist...
Gruß, noisefloor
du könntest auch die Datei in eine Liste von Strings zeilenweise einlesen, dann kannst du rel. einfach auf jeden beliebige Zeile zugreifen.
Ob das bei 100 MB aber performant oder gar elegant ist...
Gruß, noisefloor
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Nur so aus Interesse. Könntest Du Deinen Ansatz dazu dennoch hier posten? (Oder halt in ein pastebin a la paste.pocoo.org)mimu hat geschrieben: Habe mich jetz dazu entschieden, dass Ganze über ein shell script in einer Linux-Umgebung zu lösen.
Aber in einen neuen Thread
the more they change the more they stay the same