Python 选择正确的数据结构来解析文件

Python 选择正确的数据结构来解析文件,python,regex,csv,data-structures,namedtuple,Python,Regex,Csv,Data Structures,Namedtuple,我有一个包含以下格式内容的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 ') 但一个课程可以安排在多天多时间,如上文

我有一个包含以下格式内容的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所示。这只能在运行时决定。如何处理

或者,我可以使用字典或列表吗


我试图解决一个为课程分配助教的时间安排问题。我可能需要比较时间来检查将来是否有碰撞

同样使事情复杂化的是,输入文件还有其他数据需要解析。基本上,以下是格式

//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
...

我想我需要将所有这些存储在单独的数据结构中。对于每个类别,正确的reg ex模式是什么?

首先要注意有关数据的几点:

  • 您有许多独特的字符串(课程)
  • 每门课程结束后,都会有一些字符串(每周上课的次数)
  • 这样,就有了一系列唯一的键,每个键都有许多值

    对我来说,这听起来像是个好主意


    要将这些数据输入字典,请从开始。接下来,您可以使用选择每个
    [day]、[hour]:[minutes][AM/PM]
    节,也可以使用纯old以逗号将行拆分为节。课程字符串是字典的键,行的其余部分作为元组或值列表。转到下一行。

    首先注意有关数据的几点:

    {
        'CSE110': {'Mon': ['8: 00 AM'], 'Wed': ['8: 00 AM'], 'Fri': ['8: 00 AM'], 
        'CSE110': {'Mon': ['1: 00 PM'], 'Fri': ['1: 00 PM']}
    }
    
  • 您有许多独特的字符串(课程)
  • 每门课程结束后,都会有一些字符串(每周上课的次数)
  • 这样,就有了一系列唯一的键,每个键都有许多值

    对我来说,这听起来像是个好主意


    要将这些数据输入字典,请从开始。接下来,您可以使用选择每个
    [day]、[hour]:[minutes][AM/PM]
    节,也可以使用纯old以逗号将行拆分为节。课程字符串是字典的键,行的其余部分作为元组或值列表。转到下一行。

    首先注意有关数据的几点:

    {
        'CSE110': {'Mon': ['8: 00 AM'], 'Wed': ['8: 00 AM'], 'Fri': ['8: 00 AM'], 
        'CSE110': {'Mon': ['1: 00 PM'], 'Fri': ['1: 00 PM']}
    }
    
  • 您有许多独特的字符串(课程)
  • 每门课程结束后,都会有一些字符串(每周上课的次数)
  • 这样,就有了一系列唯一的键,每个键都有许多值

    对我来说,这听起来像是个好主意


    要将这些数据输入字典,请从开始。接下来,您可以使用选择每个
    [day]、[hour]:[minutes][AM/PM]
    节,也可以使用纯old以逗号将行拆分为节。课程字符串是字典的键,行的其余部分作为元组或值列表。转到下一行。

    首先注意有关数据的几点:

    {
        'CSE110': {'Mon': ['8: 00 AM'], 'Wed': ['8: 00 AM'], 'Fri': ['8: 00 AM'], 
        'CSE110': {'Mon': ['1: 00 PM'], 'Fri': ['1: 00 PM']}
    }
    
  • 您有许多独特的字符串(课程)
  • 每门课程结束后,都会有一些字符串(每周上课的次数)
  • 这样,就有了一系列唯一的键,每个键都有许多值

    对我来说,这听起来像是个好主意

    要将这些数据输入字典,请从开始。接下来,您可以使用选择每个
    [day]、[hour]:[minutes][AM/PM]
    节,也可以使用纯old以逗号将行拆分为节。课程字符串是字典的键,行的其余部分作为元组或值列表。转到下一行

    {
        '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
    
    这种形式的词典。一门课程在同一天可以有多个时段

    当您阅读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
    
    这种形式的词典。一门课程在同一天可以有多个时段

    当您阅读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
    
    这种形式的词典。一门课程在同一天可以有多个时段

    当您阅读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
    

    您需要对数据进行结构调整,以适应您将要对其执行的操作。正确的数据结构取决于您希望对数据执行的操作。如果你只想打印