11 Stimmen

Wie kann man eine große CSV-Datei anhand des Inhalts der ersten Spalte aufteilen?

  • Ich muss eine 250MB+ große csv-Datei hochladen
  • Dateiformat ist group_id, application_id, reading und Daten könnten wie folgt aussehen
1, a1, 0.1
1, a1, 0.2
1, a1, 0.4
1, a1, 0.3
1, a1, 0.0
1, a1, 0.9
2, b1, 0.1
2, b1, 0.2
2, b1, 0.4
2, b1, 0.3
2, b1, 0.0
2, b1, 0.9
.....
n, x, 0.3(lets say)  
  • Ich möchte die Datei nach folgenden Kriterien unterteilen group_id so dass die Ausgabe n Dateien sein sollte, wobei n=group_id

Ausgabe

File 1

1, a1, 0.1
1, a1, 0.2
1, a1, 0.4
1, a1, 0.3
1, a1, 0.0
1, a1, 0.9

y

File2
2, b1, 0.1
2, b1, 0.2
2, b1, 0.4
2, b1, 0.3
2, b1, 0.0
2, b1, 0.9
.....

y

File n
n, x, 0.3(lets say)  

Wie kann ich dies effektiv tun?

19voto

Zsolt Botykai Punkte 48177

awk fähig ist:

 awk -F "," '{print $0 >> ("FILE" $1)}' HUGE.csv

10voto

Fred Foo Punkte 341230

Wenn die Datei bereits sortiert ist nach group_id können Sie etwas tun wie:

import csv
from itertools import groupby

for key, rows in groupby(csv.reader(open("foo.csv")),
                         lambda row: row[0]):
    with open("%s.txt" % key, "w") as output:
        for row in rows:
            output.write(",".join(row) + "\n")

4voto

Mike Punkte 17188

Sed Einzeiler:

sed -e '/^1,/wFile1' -e '/^2,/wFile2' -e '/^3,/wFile3' ... OriginalFile 

Der einzige Nachteil ist, dass Sie die n -e Aussagen (dargestellt durch die Ellipse, die in der endgültigen Fassung nicht erscheinen sollte). Dieser Einzeiler könnte also eine ziemlich lange Zeile sein.

Die Vorteile sind jedoch, dass die Datei nur einmal durchlaufen wird, keine Sortierung vorausgesetzt wird und kein Python erforderlich ist. Außerdem ist es ein verdammter Einzeiler!

2voto

senderle Punkte 135243

Wenn die Zeilen sortiert sind nach group_id entonces itertools.groupby wäre hier nützlich. Da es sich um einen Iterator handelt, müssen Sie nicht die gesamte Datei in den Speicher laden, sondern können weiterhin Zeile für Zeile in die Datei schreiben. verwenden csv um die Datei zu laden (falls Sie das nicht schon wussten).

1voto

aweis Punkte 4998

Wenn sie nach der Gruppennummer sortiert sind, können Sie das csv-Modul verwenden, um die Zeilen in den Dateien zu durchlaufen und sie auszugeben. Informationen über das Modul finden Sie unter aquí .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X