Python - CSV-Modul zu schreiben, bestimmte Zeilen zu der neuen Datei
Ich habe da ein kleines Problem. Ich versuche ein script zu erstellen, dass nimmt große (~2 GB) csv-Dateien (id, integer, integer), sortiert Sie, indem Sie den ersten integer und schreibt dann eine neue Datei, die obersten x Zeilen (wie durch den Benutzer definiert).
Ich bin in der Lage, um die Sortierfunktion zu arbeiten als erforderlich und extrahieren die obersten X Zeilen funktioniert auch aber ich kann nicht herausfinden, wie man diese Ausgabe zu schreiben, um eine csv-Datei.
Um zu überprüfen, es hat gearbeitet, ich habe eine print-Funktion und alles scheint zu funktionieren gut.
Ich fühle mich wie ich ' m fehlt ein wirklich grundlegendes Konzept in das csv-Modul, aber ich kann nicht herausfinden, was es ist!
import csv
import operator
def csv_to_list(csv_file, delimiter=','):
with open(csv_file, 'r') as csv_con:
reader = csv.reader(csv_con, delimiter=delimiter)
return list(reader)
def sort_by_column(csv_cont, col, reverse=True):
header = csv_cont[1]
body = csv_cont[1:]
if isinstance(col, str):
col_index = header.index(col)
else:
col_index = col
body = sorted(body,
key=operator.itemgetter(col_index),
reverse=reverse)
#body.insert(0, header)
return body
def print_csv(csv_content):
for row in csv_content:
row = [str(e) for e in row]
print('\t'.join(row))
def write_csv(dest, csv_cont):
with open(dest, 'w') as out_file:
writer = csv.writer(out_file, delimiter=',')
for row in csv_cont:
writer.writerow(row)
csv_cont = csv_to_list(input_hep.csv)
row_count = sum(1 for row in csv_cont)
num_rows = int(input("Skim size?: "))
output_file = input("Output: ")
csv_sorted = sort_by_column(csv_cont, 1)
for row in range(num_rows):
print(csv_sorted[row])
Meine Grundidee war, es zu versuchen:
with open(output_file+'.csv','w') as f:
writer = csv.writer(f, delimiter =',')
for row in range(num_rows):
writer.writerow(row)
Aber dann bekomme ich eine "_csv.Fehler: iterierbar erwartet kein int" - Fehler. Ich bekomme warum, aber ich bin kämpfen, um zu verstehen, wie kann ich die Ausgabe (wie er gedruckt ist) zu schreiben in eine csv-Datei.
Irgendwelche Tipps oder Hinweise wären sehr willkommen.
InformationsquelleAutor 534 | 2015-11-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr Feld ist eine mehrdimensionale Liste, die Sie verwenden können, writerows direkt ohne Durchlaufen
Angenommen, Ihre Liste wird im folgenden format
InformationsquelleAutor erandac
Schreib ich einfach zu csv wie diese
aber ich lade die csv als multi-dimensionale Liste, wobei jede Zeile repräsentiert eine Zeile in der csv-und diese Listen mit items, die darstellen, ein Element in der Zeile
InformationsquelleAutor AndrewSmiley