У меня небольшая проблема. Я пытаюсь создать сценарий, который принимает большие (~ 2gb) csv-файлы (id, integer, integer), сортирует их по первому целому, а затем записывает в новый файл, верхние строки x (как определено пользователем).Python - модуль CSV для записи определенных строк в новый файл
Я могу получить функцию сортировки для работы по мере необходимости, а также извлечь верхние строки X, но я не могу решить, как получить этот вывод для записи в csv. Чтобы проверить, что он работает, я включил функцию печати, и все это, похоже, отлично работает.
Я чувствую, что у меня отсутствует базовая концепция в модуле csv, но я не могу понять, что это такое!
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])
Моя основная идея состояла в том, чтобы попробовать:
with open(output_file+'.csv','w') as f:
writer = csv.writer(f, delimiter =',')
for row in range(num_rows):
writer.writerow(row)
Но тогда я получаю "_csv.Error: итерацию ожидается, не Int" ошибка. Я понимаю, почему, но я изо всех сил пытаюсь понять, как я могу получить вывод (как он напечатан) для записи внутри csv. Любые советы или указатели будут оценены.