2015-03-18 76 views
0

我有下面的格式内容的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上述安排。这只能在运行时决定。如何处理这个?

否则,我可以使用Dictionary或List吗?

我正在尝试解决一个计划问题,将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 
... 

我需要将所有这些存储在独立的数据结构中,我想。什么可能是每个类别的正确注册模式?

+1

您需要构建您的数据,以适应你要*做*与它。 – 2015-03-18 21:18:18

+1

正确的数据结构取决于您想要对数据执行的操作。如果你只是想打印数据,那么你需要一个大字符串。如果您需要排序或计数或执行其他操作,那么这些操作会通知您选择的数据结构。 – unutbu 2015-03-18 21:18:22

+1

为什么不使用“字典”? – Kasramvd 2015-03-18 21:19:11

回答

2

开始注意到你的数据的几件事情:

  1. 你有一些独特的字符串(课程)
  2. 每门课程后,有一个数字串(类符合时代每周)

因此,你有一系列唯一的键,每个键都有一些值。

听起来像是dictionary给我。

要将这些数据存入字典,请从reading the file开始。接下来,您可以使用regular expressions来选择每个[day], [hour]:[minutes] [AM/PM]部分或普通的旧string.split()以逗号分隔线段。课程字符串是字典中的关键字,其余行作为元组或值列表。移到下一行。

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 
+0

听起来不错。此外,有什么可以找到像这样的模式正确的reg-ex模式?请检查主帖子中的编辑。谢谢 – raghu 2015-03-18 21:54:28

+0

编辑它...... – hyades 2015-03-19 12:31:09