Teilen Sie eine große Textdatei (ca. 50 GB) in mehrere Dateien auf

8

Ich möchte eine große Textdatei in einer Größe von 50 GB in mehrere Dateien aufteilen. Daten in den Dateien sind wie folgt- [x = irgendeine ganze Zahl zwischen 0-9]

%Vor%

Es könnte einige Milliarden Zeilen in der Datei geben und ich möchte zum Beispiel 30/40 Millionen pro Datei schreiben. Ich denke, die Schritte wären -

  • Ich muss die Datei
  • öffnen
  • dann mit readline () lesen Sie die Datei Zeile für Zeile und schreibe gleichzeitig in eine neue Datei
  • und sobald es die maximale Anzahl von Zeilen erreicht, wird es eine andere Datei erstellen und beginnt wieder zu schreiben.

Ich frage mich, wie man all diese Schritte effizient und schneller in einen Speicher bringt. Ich habe einige Beispiele im Stack gesehen, aber keiner von ihnen hilft mir, was ich genau brauche. Ich würde es sehr schätzen, wenn mir jemand helfen könnte.

    
saz 30.03.2014, 22:55
quelle

3 Antworten

17

Diese Arbeitslösung verwendet den in der Shell verfügbaren Befehl split . Da der Autor bereits eine Möglichkeit einer Nicht-Python-Lösung akzeptiert hat, bitte nicht runterladen.

Zuerst habe ich eine Testdatei mit 1000M Einträgen (15 GB) mit

erstellt %Vor%

Dann habe ich split :

benutzt %Vor%

Es hat 5 Minuten gedauert, einen Satz von 34 kleinen Dateien mit den Namen t00 - t33 zu erstellen. 33 Dateien sind jeweils 458 MB und die letzte t33 ist 153 MB.

    
Andrey 31.03.2014, 01:35
quelle
10
%Vor%     
log0 21.07.2014 10:14
quelle
4

Ich würde das Unix-Utility-Split verwenden, wenn es für Sie verfügbar ist und Ihre einzige Aufgabe ist es, die Datei zu teilen. Hier ist jedoch eine reine Python-Lösung:

%Vor%

Wenn alle Ihre Zeilen vier 3-stellige Zahlen enthalten und Sie mehrere Kerne verfügbar haben, können Sie die Dateisuche ausnutzen und mehrere Prozesse ausführen.

    
tommy.carstensen 15.07.2014 13:26
quelle

Tags und Links