使用Python输出以下示例的CSV文件
我又回来了,继续我的学生项目分配问题的故事。感谢Moron(他可一点也不符合这个名字的意思),让我对项目的评估部分有了一些方向。
我想用“分配问题”和“匈牙利算法”的思路,把我的数据整理成一个.csv文件,最后在电子表格中看起来像这样。这是基于我在这里看到的结构。
| | 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())
可以得到一个排序好的学生ID列表,这个列表会用来填充行标签;而用sorted(projects.keys())
可以得到一个列表,用来填充列标签。因此,对于每个学生,我会进入他们的偏好字典,匹配适用的项目和对应的排名。我能做到这一点。
我现在遇到的问题是,不知道怎么创建一个.csv文件。任何帮助、建议或者好的教程都会非常感谢。
2 个回答
3
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)