Ich habe eine große CSV-Datei mit Informationen über abgetastete Krankheitserreger, die mehrere verschiedene Arten darstellen. Ich möchte diese CSV-Datei nach Arten aufteilen, also werde ich eine CSV-Datei pro Spezies haben. Die Daten in der Datei sind nicht in einer bestimmten Reihenfolge. Meine CSV-Datei sieht wie folgt aus:Aufteilen einer ungeordneten CSV-Datei auf der Grundlage der Werte in der n-ten Spalte/
maa_2015-10-07_15-15-16_5425_manifest.csv,NULL,ERS044420,EQUI0208,1336,Streptococcus equi,15/10/2010,2010,Belgium,Belgium
maa_2015-09-28_13-07-45_0098_manifest.csv,NULL,ERS852528,2789STDY5834916,154046,Hungatella hathewayi,2013,2013,United Kingdom,UK
maa_2015-09-28_13-07-45_0098_manifest.csv,NULL,ERS852530,2789STDY5834918,33039,Ruminococcus torques,2013,2013,United Kingdom,UK
maa_2015-09-28_13-07-45_0098_manifest.csv,NULL,ERS852533,2789STDY5834921,40520,Blautia obeum,2013,2013,United Kingdom,UK
maa_2015-09-28_13-07-45_0098_manifest.csv,NULL,ERS852535,2789STDY5834923,1150298,Fusicatenibacter saccharivorans,2013,2013,United Kingdom,UK
maa_2015-09-28_13-07-45_0098_manifest.csv,NULL,ERS852537,2789STDY5834925,1407607,Fusicatenibacter,2013,2013,United Kingdom,UK
maa_2015-09-28_13-07-45_0098_manifest.csv,NULL,ERS852540,2789STDY5834928,39492,Eubacterium siraeum,2013,2013,United Kingdom,UK
maa_2015-09-28_13-07-45_0098_manifest.csv,NULL,ERS852544,2789STDY5834932,292800,Flavonifractor plautii,2013,2013,United Kingdom,UK
maa_2015-09-28_13-07-45_0098_manifest.csv,NULL,ERS852551,2789STDY5834939,169435,Anaerotruncus colihominis,2013,2013,United Kingdom,UK
maa_2015-10-07_15-15-16_5425_manifest.csv,NULL,ERS044418,EQUI0206,1336,Streptococcus equi,05/02/2010,2010,Belgium,Belgium
maa_2015-10-07_15-15-16_5425_manifest.csv,NULL,ERS044419,EQUI0207,1336,Streptococcus equi,29/07/2010,2010,Belgium,Belgium
Der Name der Art ist am Index 5.
ich diese ursprünglich versucht:
import csv
from itertools import groupby
for key, rows in groupby(csv.reader(open("file.csv")),
lambda row: row[5]):
with open("%s.csv" % key, "w") as output:
for row in rows:
output.write(",".join(row) + "\n")
Aber dies fehlschlägt, weil die Daten nicht bestellt werden Nach Spezies und es gibt kein append-Argument für die Ausgabe (das ist mir bekannt), so dass jedes Mal, wenn das Skript auf einen neuen Eintrag einer Spezies trifft, die es bereits in eine Datei geschrieben hat, die ersten Einträge überschreibt.
Gibt es eine einfache Möglichkeit, die Daten nach Spezies zu sortieren und dann das obige Skript auszuführen oder eine Möglichkeit, die Ausgabe des obigen Skripts an eine Datei anzuhängen, anstatt sie zu überschreiben?
Auch würde ich gerne jede der Ausgabedateien nach der Art, die sie enthalten benannt werden.
Danke.
Sie können dies leicht mit Pandas tun, siehe http://stackoverflow.com/questions/37683085/splitting-csv-file-of-multiple-objects-over-time-by-time-point/37683227#37683227 und http://stackoverflow.com/questions/40789383/python-split-csv-file-according-to-first-character-of-the-first-column/40789645#40789645 – EdChum
Es sollte funktionieren; 'groupby()' gruppiert sich bereits nach dem Schlüssel, unabhängig von der Reihenfolge. Welchen Fehler bekommst du? –