Попробуйте сохранить файл .c перед сборкой. Я полагаю, что ваш компьютер ссылается на путь к файлу без какой-либо информации внутри него.
- имел аналогичную проблему при создании проектов C
ИМХО, пришло время научиться отлаживать простые программы. Некоторые IDE поставляются с хорошими отладчиками, но вы все равно можете использовать старый добрый pdb
или просто добавить следы печати в свой код, чтобы легко понять, что происходит.
Здесь первая и наиболее очевидная проблема здесь:
tot = sum(1 for col in k)
Это довольно бесполезно, потому что for col in k
было бы достаточно, но оно потребляет всю совокупность итератора k
, поэтому следующая строка for col in k:
пытается получить доступ к итератору, который уже достиг своего конца, и цикл немедленно останавливается.
Это еще не все:
Student
с верхним регистром S
, а вы проверяете student
с нижним регистром s
: это разные строки .. В этом случае проблемы существуют во всех других сравнениях. student
, вы устанавливаете a
на строку, следующую за ним ... и никогда не меняете ее. Таким образом, даже если вы исправите ошибки в своем деле, вы будете последовательно использовать эту единственную строку для студента! Если вы новичок, правило будет Keep It Simple, Stupid . Поэтому начните с того, что вы можете контролировать, а затем начните добавлять другие функции:
tot = sum(1 for col in k)
... DictWriter
. Удачи в практике Python!
Вот возможный способ чтения части:
import csv
la = {} # use a dict to use the student name as index
with open("new.csv","r",newline='\n') as k:
k=csv.reader(k, delimiter=',', quotechar='_', quoting=csv.QUOTE_ALL)
# counter = 0 # pretty useless...
for col in k :
if col[0] =='student':
l2 = set() # initialize a set to store subjects
la[col[1]] = l2 # reference it in la indexed by the student's name
else: # it should be a subject line
l2.add(col[1]) # note the subject
# Ok la is a dict with studend names as key, and a set containing subjects for that student as value
print(la)
Для части записи вы должны:
]... оставленный в качестве упражнения ...