Die änderung einer einzigen Zeile in einer Datei
Gibt es eine Möglichkeit, in Python, zum ändern einer einzelnen Zeile in einer Datei, ohne eine for-Schleife, einer Schleife durch alle Zeilen?
Die genauen Positionen innerhalb der Datei, die geändert werden müssen, ist unbekannt.
- Wie Sie wissen, welche Linie es ist? Wenn Sie wissen, die genaue byte-position sicher. Wenn nicht, ist es nicht so klar.
- Sind die Linien mit fester Länge?
- Schritt zurück von Python und darüber nachzudenken, wie Dateien gespeichert sind (konzeptionell, ignorieren Fragmentierung und Datei-system-details) - als ein kontinuierlicher Byte-array. In diesem Modell, zu Esel oder zu entfernen, etwas in der Mitte bedeutet, dass das verschieben von allen bytes, die später kommen. Es kann ein Weg, dies zu verbergen in Ihrem Python-code, aber es immer noch geschieht unter der Haube. Vor allem, da es sounds, die Sie haben zu prüfen, jeder Zeile, um zu wissen, ob und wie Sie wollen, es zu ändern.
- Sagen, ich haben unbekannte Zeilenlänge und keine festen Positionen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte diese Arbeit -
Jedoch, dies kann Ressourcen verschlingen (Zeit und Speicher) wenn Sie Ihre Datei zu groß ist, weil die
f.readlines()
Funktion lädt die gesamte Datei, aufgeteilt in Zeilen in einer Liste.Dies wird gut für kleine und mittlere Dateien.
readlines
iteriert über alle Zeilen in der Datei.Ja, Sie können ändern Sie die Zeile im Ort, aber wenn sich die Länge ändert, müssen Sie neu zu schreiben, den Rest der Datei.
Müssen Sie auch wissen wo die Zeile, in der Datei. Dies bedeutet in der Regel muss das Programm mindestens Lesen Sie die Datei bis zu der Zeile, die geändert werden muss.
Gibt es Ausnahmen - wenn die Linien sind alle fester Länge, oder Sie haben eine Art von index, der die Datei zum Beispiel
Es sei denn, wir reden über eine ziemlich gekünstelte situation, in der Sie bereits wissen eine Menge über die Datei, die Antwort ist Nein. Sie haben Durchlaufen Sie die Datei, um zu bestimmen, wo das newline-Zeichen sind; es gibt nichts besonderes über eine "line", wenn es um die Speicherung von Dateinamen -- es sieht alles die gleichen.
mmap
Objekt, wird die Aufgabe einfacher machen. Undlinecache
verwendet einen cache zu emulieren line-level-random-lese-Zugriff.