使用Python输出以下示例的CSV文件

2 投票
2 回答
2435 浏览
提问于 2025-04-15 23:20

我又回来了,继续我的学生项目分配问题的故事。感谢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)

撰写回答