我有一个csv文件,内容格式如下:
CSE110, Mon, 1:00 PM, Fri, 1:00 PM
CSE114, Mon, 8:00 AM, Wed, 8:00 AM, Fri, 8:00 AM
这基本上是课程名称,后面跟着它的时间。
解析和存储这些数据的最佳数据结构是什么?
我尝试使用命名元组,如下所示:
CourseTimes = namedtuple('CourseTimes', 'course_name, day, start_time ')
但是如上面的cse114所示,可以在多个日期和时间安排单个课程。这只能在运行时决定。如何处理?
或者,我可以使用词典或列表吗?
我正在尝试解决调度问题以将TA分配给课程。我可能需要比较时间来检查未来的任何碰撞
另外,为了使事情复杂化,输入文件还包含我需要解析的其他数据。基本上以下是格式。
//Course times
CSE110, Mon, 1:00 PM, Fri, 1:00 PM
CSE114, Mon, 8:00 AM, Wed, 8:00 AM, Fri, 8:00 AM
....
//Course recitation times
CSE306, Mon, 2:30 PM
CSE307, Fri, 4:00 PM
...
//class strength
CSE101, 44, yes
CSE101, 115, yes
...
我想将所有这些存储在我想要的单独的数据结构中。什么可能是每个类别的正确的注册模式?
答案 0 :(得分:2)
首先注意您的数据:
有了这个,你有一系列独特的键,每个键都有许多值。
对我来说听起来像dictionary。
要将数据输入字典,请从reading the file开始。接下来,您可以使用regular expressions选择每个[day], [hour]:[minutes] [AM/PM]
部分或普通旧string.split(),以便用逗号分隔行。课程字符串是字典中的键,其余部分作为元组或值列表。转到下一行。
答案 1 :(得分:1)
{
'CSE110': {'Mon': ['8: 00 AM'], 'Wed': ['8: 00 AM'], 'Fri': ['8: 00 AM'],
'CSE110': {'Mon': ['1: 00 PM'], 'Fri': ['1: 00 PM']}
}
此表格的字典。课程可以在同一天有多个插槽。
当您阅读csv文件时,您将为课程和当天创建(如果它尚未存在)并为其分配单个元素列表。如果课程和日期的值已经存在,您只需附加到现有列表。这意味着课程在同一天有多个时间安排。
您不需要正则表达式来查找输入行的类别。 您可以找到第一种和第二种类型(即单日和多日),如
l = line.split(', ')
try:
n = int(l[1]) # n = strength
except:
#continue adding to dictionary since second element in the list is not an integer