парсинг CSV в Python и запись в другой CSV, да, есть выбор, и нет, если выбор отсутствует

Попробуйте сохранить файл .c перед сборкой. Я полагаю, что ваш компьютер ссылается на путь к файлу без какой-либо информации внутри него.

- имел аналогичную проблему при создании проектов C

0
задан vidiv 13 March 2019 в 03:31
поделиться

1 ответ

ИМХО, пришло время научиться отлаживать простые программы. Некоторые 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 . Поэтому начните с того, что вы можете контролировать, а затем начните добавлять другие функции:

  1. прочитайте входной файл с помощью модуля csv и просто напечатайте список для каждой строки. Не идите дальше, пока это не даст того, что вы хотите! Это остановило бы вас от ошибки tot = sum(1 for col in k) ...
  2. Определите каждого ученика. Просто напечатайте его сначала, затем сохраните его имя в списке и напечатайте список после цикла
  3. идентификации субъекта. Просто напечатайте их сначала, а затем напишите словарь с предметами.
  4. Интересно, как вы можете получить это в конце цикла ...
  5. просто поймите, что вы можете сохранить имя студента в этом словаре и поместить полный словарь в список (не стесняйтесь задавать новый вопрос, если вы застряли там ...)
  6. распечатать список словарей в конце цикла
  7. создайте одну строку для ученика, которая могла бы кормить писателя csv, или, как у вас уже есть список dict, рассмотрите использование 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)

Для части записи вы должны:

]
  • создать объединение всех наборов, чтобы получить все возможные предметы (если вы этого не знаете)
  • для каждого предмета (имя, предметы) из la, создать список, в котором хранится да или нет для каждый из возможных субъектов
  • записывает этот список в выходной CSV-файл

... оставленный в качестве упражнения ...

0
ответ дан Serge Ballesta 13 March 2019 в 03:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: