Здесь есть несколько проблем с вашим кодом, я постараюсь разбить его .. Я пока не рекомендую переходить к пандам.Я собираюсь предположить, что это на самом деле запись данных ... но вы должны проверить "names.csv", чтобы убедиться, что он не пустой.Похоже, это будет писать только одну строку.Я также не уверен, почему вы установили newline=''
, я, вероятно, не сделал бы этого здесь ... хотя я не уверен, что это будет иметь значение csv.writer
.
with open('names.csv', 'a', newline='') as names:
csvWriter = csv.writer(names)
csvWriter.writerow([name, int(score)])
обычно у вас будетцикл внутри утверждения, подобного следующему:
my_list = [("Bob", "2"), ("Alice", "1")]
with open('names.csv', 'a') as names:
csvWriter = csv.writer(names)
for name, score in my_list:
csvWriter.writerow([name, int(score)])
Вы делаете двух читателей CSV здесь .. Я не уверен, почему.Второй использует "."так как это разделитель ... вы не указали разделитель при написании CSV, поэтому он будет иметь стандартный разделитель с запятой ",".csvReader
будет использовать это по умолчанию, но csv1
будет пытаться разбить на периоды и не будет делать это хорошо.
with open('names.csv', 'r') as names:
csvReader = csv.reader(names)
csv1 = csv.reader(names, delimiter='.')
Вы не должны использовать "sort" в качестве имени переменной ... этоназвание общего метода.Но это на самом деле ничего не сломает ... вы создаете новую отсортированную версию csv1
, но вы фактически запускаете цикл for на csvReader
, который не изменился с момента установки выше.Вы также создаете csv_writer
с names
с открытым для чтения, а не для записи.но вы все равно не используете его.itemgetter
смотрит на индекс 0
, который будет именами вашего писателя .. если вы хотите отсортировать по баллу, используйте 1
.
sort = sorted(csv1, key=operator.itemgetter(0))
csv_writer = csv.writer(names, delimiter='.')
for name in csvReader:
print(' '.join(name))
Я думаю, это может быть больше, чем высобираемся .. с моим списком примеров.
#!/usr/bin/env python3
import csv
import operator
my_list = [("Bob", "2"), ("Alice", "1")]
with open('names.csv', 'a') as names:
csvWriter = csv.writer(names)
for name, score in my_list:
csvWriter.writerow([name, int(score)])
with open('names.csv', 'r') as names:
csvReader = csv.reader(names)
sorted_reader = sorted(csvReader, key=operator.itemgetter(1))
for name, score in sorted_reader:
print(name, score)
Вывод:
Alice 1
Bob 2
Поскольку вы хотите, чтобы он выглядел "как таблица лидеров", вы, вероятно, хотите другой вид.. Вы хотите изменить его и фактически использовать целочисленные значения столбца оценки (например, чтобы 100 отображалось выше 2).
sorted_reader = sorted(csvReader, key=lambda row: int(row[1]), reverse=True)