Sehr geehrte Python Programmierer,
ich bin ein Neuling und komm bei einem Problem nicht weiter,, wäre echt froh, wenn mir jemand helfen könnte!
Folgendes Problem:
Ich lese eine Datei ein:
f = open ("C:/Users/Me/Desktop/beispiel.txt", "w")
und möchte die 12te Zeile verändern, in dem ich sie als String speichere, mit den verfügbaren Methoden verändere, anschließend möchte ich sie zurück in die 12te Zeile der Datei schreiben
Dann nurnoch
f.close()
und die 12te Zeile in beispiel.txt sollte geändert sein.
Ich habe jetzt über eine Schleife geschafft, die 12te Zeile in einen String zu speichern.
for i in range (0 , 11):
line = f.readline()
wenn ich dann line mit den string methoden bearbeitet habe, weiß ich nicht, wie ich sie zurückschreiben kann.
Hat jemand eine Idee?
Gruß
Datei oeffnen, Zeile veraendern
Hallo und willkommen im Forum!
Nur in wenigen Sonderfällen ist es möglich eine Zeile in einer Datei direkt zu verändern. Zum Beispiel dann, wenn du immer gleich viele Bytes in der Zeile hast. Wahrscheinlich ist das hier aber nicht der Fall. Dir bleibt also nichts weiter übrig als die vorhandene Datei einzulesen, die Zeile zu ändern und wieder in eine andere Datei zu schreiben. Am Ende löscht du die alte Datei und benennst die neue entsprechend um. Das kannst du alles mit Boardmitteln machen.
Noch ein kleiner Tipp: Am besten ist es, wenn du Dateien mit dem with-Statement öffnest (frag mal Google danach), dann vergisst du nicht die Datei zu schließen, auch wenn ein Fehler auftritt. Das ganze sieht dann in etwa so aus:
Dann brauchst du die Datei auch nicht mehr schließen. Das ganze geht natürlich auch verschachtelt:
Außerdem solltest du nicht versuchen die Datei mit dem "w"-Parameter zu lesen, dass löscht den gesamten Inhalt
Ein paar Tipps würden mir noch einfallen, aber versuche mal meinen Vorschlag umzusetzen. Am besten Postest du deine Lösung dann hier noch einmal, oder zumindest einen Ansatz, dann wirst du erfahrungsgemäß noch weitere nützliche Hinweise erhalten.
Sebastian
Nur in wenigen Sonderfällen ist es möglich eine Zeile in einer Datei direkt zu verändern. Zum Beispiel dann, wenn du immer gleich viele Bytes in der Zeile hast. Wahrscheinlich ist das hier aber nicht der Fall. Dir bleibt also nichts weiter übrig als die vorhandene Datei einzulesen, die Zeile zu ändern und wieder in eine andere Datei zu schreiben. Am Ende löscht du die alte Datei und benennst die neue entsprechend um. Das kannst du alles mit Boardmitteln machen.
Noch ein kleiner Tipp: Am besten ist es, wenn du Dateien mit dem with-Statement öffnest (frag mal Google danach), dann vergisst du nicht die Datei zu schließen, auch wenn ein Fehler auftritt. Das ganze sieht dann in etwa so aus:
Code: Alles auswählen
with open("C:/Users/...", "w") as fp:
fp.write("das ist ein test")
Code: Alles auswählen
with open("quelle") as source:
with open("ziel", "w") as destination:
for line in source:
destination.write("ziel")
Ein paar Tipps würden mir noch einfallen, aber versuche mal meinen Vorschlag umzusetzen. Am besten Postest du deine Lösung dann hier noch einmal, oder zumindest einen Ansatz, dann wirst du erfahrungsgemäß noch weitere nützliche Hinweise erhalten.
Sebastian
Das Leben ist wie ein Tennisball.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ergänzend zu EyDu: Du könntest `enumerate` verwenden, um einen Index zu generieren. Damit kannst Du dann abfragen, ob Du in der 12. Zeile bist und dort etwas geändertes in die neue Datei schreiben.
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,
Danke fuer die Antworten! Habe es jetzt soweit hinbekommen, dass es so laeuft, wie ich es mir vorgestellt habe. Eine Frage haette ich jedoch noch:
Ich oeffne immernoch meine Datei so:
f = open ("C:/Users/Me/Desktop/beispiel.txt", "w")
Ist es moeglich, dass ich den Dateinamen, hier:"beispiel" selber in Python generieren kann? Z.B. heissen alle Dateien im Ordner 1.txt, 2.txt, 3.txt usw. Kann ich praktisch die Dateien ueber eine Schleife oeffnen?
Danke fuer die Antworten! Habe es jetzt soweit hinbekommen, dass es so laeuft, wie ich es mir vorgestellt habe. Eine Frage haette ich jedoch noch:
Ich oeffne immernoch meine Datei so:
f = open ("C:/Users/Me/Desktop/beispiel.txt", "w")
Ist es moeglich, dass ich den Dateinamen, hier:"beispiel" selber in Python generieren kann? Z.B. heissen alle Dateien im Ordner 1.txt, 2.txt, 3.txt usw. Kann ich praktisch die Dateien ueber eine Schleife oeffnen?
Bitte gewoehn dir mal an, deinen Code in python-tags zu setzen, damit man den lesen kann.
Und klar kann man sowas machen. Entweder du baust dir die filenamen zusammen
Oder du kannst auch os.listdir verwenden, dann musst du noch nicht mal das machen. Oder das Modul glob.
Und klar kann man sowas machen. Entweder du baust dir die filenamen zusammen
Code: Alles auswählen
for i in xrange(10):
print "datei_%i.txt" % i
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wieso? EyDu hatte Dir doch den idiomatischen Ansatz gezeigt!?n0s hat geschrieben: Ich oeffne immernoch meine Datei so:
f = open ("C:/Users/Me/Desktop/beispiel.txt", "w")
Kannst Du machen. `xrange` in Python 2.x oder `range` in Python 3.x liefern Dir die benötigten Integerwerte. Du kannst das dann mittels String-Konkatenation zusammenbauen.n0s hat geschrieben: Ist es moeglich, dass ich den Dateinamen, hier:"beispiel" selber in Python generieren kann? Z.B. heissen alle Dateien im Ordner 1.txt, 2.txt, 3.txt usw. Kann ich praktisch die Dateien ueber eine Schleife oeffnen?
Beispiel:
Code: Alles auswählen
>>> for index in range(10):
... print("{}.txt".format(index))
...
0.txt
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt
9.txt
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