2010-05-30 3 views
2

Я снова с моей текущей сагой вопросов о распределении студенческих проектов. Благодаря Moron (кто не соответствует его тезке) У меня есть немного направление для части оценки моего проекта.Использование Python для получения вывода CSV для следующего примера

Идея задания и венгерский алгоритм Я хотел бы выразить свои данные в виде CSV-файла, который будет выглядеть так, как в форме электронных таблиц. Это основано на структуре, которую я видел here.

|   | Project 1 | Project 2 | Project 3 | 
|----------|-----------|-----------|-----------| 
|Student1 |   |  2  |  1  | 
|----------|-----------|-----------|-----------| 
|Student2 |  1  |  2  |  3  | 
|----------|-----------|-----------|-----------| 
|Student3 |  1  |  3  |  2  | 
|----------|-----------|-----------|-----------| 

Чтобы сделать его менее загадочным: строки являются учащимися/агенты, а столбцы представляют собой проекты/задачи. Очевидно, ОДИН проект может быть назначен ОДНОМУ студенту. Короче, это мой проект. Поля представляют собой весы предпочтений, которые учащиеся ставили на проекты (от 1 до 10). Если этот пробел отсутствует, этот ученик не хочет этого проекта, и у него нет возможности назначить его.

В любом случае, мои данные хранятся в словарях. В частности, студенты и проекты словари, такие, что:

students[student_id] = Student(student_id, student_name, alloc_proj, alloc_proj_rank, preferences) 
    where preferences is in the form of a dictionary such that 
     preferences[rank] = {project_id} 

и

projects[project_id] = Project(project_id, project_name) 

Я знаю, что sorted(students.keys()) даст мне отсортированный список всех студенческих идентификаторов, которые населяют заголовки строк и sorted(projects.keys()) будет дайте мне список, который мне нужен, чтобы заполнить метки столбцов. Таким образом, для каждого ученика я бы зашел в их словарь предпочтений и соответствовал применимым проектам для рангов. Я могу так много сделать.

Где я ошибаюсь, я понимаю, как создать CSV-файл. Любая помощь, указатели или хорошие учебные пособия будут высоко оценены.

ответ

5

Проверьте модуль csv. В принципе, вам просто нужно, чтобы получить данные в какой-то последовательности (список, кортеж и т.д.), а затем вы можете просто сделать csv.writerow()

import csv 
cot=csv.writer(open('file.csv','wb')) 

tmp=[['','Project 1','Project 2','Project 3'], 
    ['Student1','','2','1'], 
    ['Student2','1','2','3'], 
    ['Student3','1','3','2']] 
for t in tmp: 
    cot.writerow(t) 
+0

Так что мало пустое пространство в левом верхнем углу просто пустая строка? – PizzAzzra

+0

Да, это создаст пустое поле в вашем файле csv – dgraves

3

Модуль csv был создан именно для этого.