Python 选择正确的数据结构来解析文件
我有一个包含以下格式内容的csv文件: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 ') 但一个课程可以安排在多天多时间,如上文
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
您需要对数据进行结构调整,以适应您将要对其执行的操作。正确的数据结构取决于您希望对数据执行的操作。如果你只想打印