Löschen Sie den Inhalt einer Datei vor dem schreiben (in Python)?
Ich versuche, meine hand auf dieser rosalind problem und bin laufen in ein Problem. Ich denke, alles was in meinem code ist richtig, aber es ist natürlich nicht so, es läuft nicht wie gedacht. ich möchten, löschen Sie den Inhalt der Datei und schreiben Sie dann einen text, - Datei. Das Programm schreibt den text, ich will es, aber es funktioniert nicht, löschen Sie zuerst den anfänglichen Inhalte.
def ini5(file):
raw = open(file, "r+")
raw2 = (raw.read()).split("\n")
clean = raw2[1::2]
raw.truncate()
for line in clean:
raw.write(line)
print(line)
Ich gesehen habe:
So löschen Sie den Inhalt einer Datei vor dem schreiben in es in ein python-script?
Aber mein problem noch besteht. Was mache ich falsch?
Nebenbei, dies ist keine gute Praxis-besser, erstellen Sie eine separate temporäre Datei für die Ausgabe, und benennen Sie ihn über das original, wenn Sie fertig; so dass Sie nicht zerstören Ihre input-Datei wenn Ihr Programm nicht abgeschlossen werden, und andere Prozesse auf dem system laufen gleichzeitig immer Zugriff auf eine version oder der andere, sei es die ursprüngliche oder aktualisierte form.
InformationsquelleAutor Tare Gaskin | 2017-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
truncate()
schneidet bei die aktuelle position. Pro Dokumentation, Hervorhebung Hinzugefügt:Nach einem
read()
, wird die aktuelle position am Ende der Datei. Wenn Sie möchten, kürzen und umschreiben mit, dass dieselbe Datei verarbeiten zu können, müssen Sie eineseek(0)
zu bewegen zurück an den Anfang.Also:
(Man könnte auch bestanden haben
raw.truncate(0)
können, aber das hätte Links den Mauszeiger-und damit der Standort für die Zukunft schreibt-an einer anderen position als der Anfang der Datei, so dass Sie Ihre Datei mit geringer Datendichte, wenn Sie begann zu schreiben, um es an dieser position).InformationsquelleAutor Charles Duffy
Wenn Sie möchten komplett überschreiben die alten Daten in der Datei, die Sie verwenden sollten ein anderes
mode
um die Datei zu öffnen.Sollte es sein:
Um Ihr problem zu lösen, Lesen Sie Zuerst den Inhalt der Datei:
Und öffnen Sie diese dann mit der
write
- Modus.Auf diese Weise werden Sie nicht hängen Sie Ihre text-Datei, Sie werden schreiben Sie einfach nur Ihre Daten ein.Lesen Sie über mode-Dateien hier.
w
, aber es ist nicht geeignet für diesen Zweck. Wenn Sie vorschlagen, dass Sie schließen das Lesen, verarbeiten und erstellen Sie dann ein zweites schreiben Griff, das ist praktikabel, aber vielleicht sind Sie noch deutlicher.Du hast Recht, ich habe es.
upvote für Einfachheit. Ich möchte vermeiden, öffnen eines handles für lese - /Schreibzugriff, wenn ich es vermeiden kann. Obwohl ich vermute, dass die Wiederverwendung der gleiche Griff ist schneller.
Ok, also ich hab es so laufen, wie ich es haben möchte. Vielen Dank an alle! Um zu klären, obwohl-Zum extrahieren von Inhalt (wie string-Informationen) habe ich zum öffnen der Datei im lese-Modus, jedoch zum Bearbeiten der eigentlichen Datei, die ich öffnen muss es im write-Modus. Beide habe ich zum öffnen der Datei im lese-Modus und dann den write-Modus (nicht mit "r+")?
sicherlich funktioniert-meine Antwort beschreibt, wie Sie abschneiden und zurück an den Anfang der Datei, bevor Ihr zu schreiben. Als solche, haben Sie zwei Möglichkeiten, mit zwei verschiedenen Verhaltensweisen -- die man besser geeignet ist, hängt von Ihrem Anwendungsfall. Eröffnung einer separaten Datei-handle bedeutet, dass Sie möglicherweise eine andere inode-schreiben als Sie Lesen, wenn der Verzeichnis-Eintrag wurde geändert unter Euch, so sind diese sehr viel zwei verschiedene Lösungen, jede mit Ihrer eigenen Semantik.
InformationsquelleAutor Ofer Arial