Sagen wir, Sie möchten die Datei in N Teile aufteilen, dann fangen Sie einfach an, von der Rückseite der Datei zu lesen (mehr oder weniger) und rufen Sie wiederholt truncate :
%Vor%Kürzen Sie die Dateigröße. Wenn das optionale Size-Argument vorhanden ist, wird die Datei auf (höchstens) diese Größe abgeschnitten. Die Größe entspricht standardmäßig der aktuellen Position. Die aktuelle Dateiposition wird nicht geändert. ...
Sei vorsichtig, denn ich habe das nicht getestet. Es kann erforderlich sein, flush
nach dem Aufruf von truncate aufzurufen, und ich weiß nicht, wie schnell das Dateisystem tatsächlich den Speicherplatz freigibt.
Wenn Sie unter Linux / Unix arbeiten, verwenden Sie den Befehl split wie dieser Typ tut das?
%Vor%BEARBEITEN: Verwenden Sie dann csplit .
Ich bin mir ziemlich sicher, dass es da ist, da ich sogar in der Lage bin, die Quelldateien von Skripten zu bearbeiten / zu lesen, aber das größte Problem wäre wahrscheinlich die Verschiebung, die man beim Start machen würde am Anfang der Datei. Wenn Sie andererseits die Datei durchlaufen und alle Anfangspositionen der Zeilen aufzeichnen, können Sie in umgekehrter Reihenfolge der Position gehen, um die Zeilen zu kopieren. Wenn das erledigt ist, kannst du zurückgehen, die neuen Dateien nacheinander aufnehmen und (wenn sie klein genug sind) mit readlines () eine Liste erstellen, die Reihenfolge der Liste umkehren und dann zum Anfang suchen der Datei und überschreiben die Zeilen in ihrer alten Reihenfolge mit den Zeilen in ihrer neuen.
(Sie würden die Datei nach dem Lesen des ersten Zeilenblocks vom Ende abschneiden, indem Sie die Methode truncate()
verwenden, die alle Daten jenseits der aktuellen Dateiposition abschneidet, wenn sie ohne Argumente außer dem des Dateiobjekts verwendet wird Verwenden Sie eine der Klassen oder eine Unterklasse einer der Klassen aus dem Paket io
, um Ihre Datei zu lesen.Sie müssen nur sicherstellen, dass die aktuelle Dateiposition am Anfang der letzten Zeile endet in eine neue Datei geschrieben.)
BEARBEITEN: Aufgrund Ihres Kommentars, dass Sie die Trennungen an den richtigen schließenden Tags vornehmen müssen, müssen Sie wahrscheinlich auch einen Algorithmus entwickeln, um solche Tags zu erkennen (möglicherweise mithilfe der peek
-Methode), möglicherweise unter Verwendung eines regulären Ausdrucks .
Wenn die Zeit kein Hauptfaktor ist (oder Verschleiß an der Festplatte):
Wenn Python dir diese Kontrolle nicht gibt, musst du vielleicht in C eintauchen.
Es ist eine Zeit, eine neue Festplatte zu kaufen!
Sie können eine Sicherungskopie erstellen, bevor Sie alle anderen Antworten ausprobieren und keine Daten verloren gehen:)