Python 使用Re.split从文件构造字典

Python 使用Re.split从文件构造字典,python,Python,我正在读一个文件,文件中的这一行给我带来了问题。是的 CSE 3380,professional,CSE 2315,note: MATH 3330 can be taken instead 我编写的用于拆分的代码是使用re.split模块来遵循这些类型的文件将遵循的模式,即 class(comma) catagory(comma) prereq class(comma) note(semicolon) 有多行都是以相同的方式构建的,但有些行有破折号和其他字符,因此基于非字母字符的拆分方法没有

我正在读一个文件,文件中的这一行给我带来了问题。是的

CSE 3380,professional,CSE 2315,note: MATH 3330 can be taken instead
我编写的用于拆分的代码是使用re.split模块来遵循这些类型的文件将遵循的模式,即

class(comma) catagory(comma) prereq class(comma) note(semicolon)
有多行都是以相同的方式构建的,但有些行有破折号和其他字符,因此基于非字母字符的拆分方法没有帮助。我想在逗号处拆分,逗号,逗号,分号之类的

course, catagory, pre, note = re.split(', |, |, |: ', line)

我收到一个错误,上面写着“ValueError:需要超过1个值才能解包”。我不知道为什么。我在其他不同的图案行中使用了这种方法,但对于这种特殊图案,我遇到了麻烦。

先用分号分割,然后用逗号分割第一部分:

>>> var = 'CSE 3380,professional,CSE 2315,note: MATH 3330 can be taken instead'
>>> var = var.split(':')
>>> var
['CSE 3380,professional,CSE 2315,note', ' MATH 3330 can be taken instead']
>>> var[0] = var[0].split(',')
>>> var
[['CSE 3380', 'professional', 'CSE 2315', 'note'], ' MATH 3330 can be taken instead']

只需先用分号拆分,然后用逗号拆分第一部分:

>>> var = 'CSE 3380,professional,CSE 2315,note: MATH 3330 can be taken instead'
>>> var = var.split(':')
>>> var
['CSE 3380,professional,CSE 2315,note', ' MATH 3330 can be taken instead']
>>> var[0] = var[0].split(',')
>>> var
[['CSE 3380', 'professional', 'CSE 2315', 'note'], ' MATH 3330 can be taken instead']
然后
parts
是元组:

('CSE 3380', 'professional', 'CSE 2315', 'MATH 3330 can be taken instead')
或者将其作为更易于使用的词典:

line = "CSE 3380,professional,CSE 2315,note: MATH 3330 can be taken instead"
parts = re.match('^(?P<class>.*?), ?(?P<catagory>.*?), ?(?P<prereq>.*?)(?:, ?note: ?(?P<note>.*))$', line).groupdict()
然后
parts
是元组:

('CSE 3380', 'professional', 'CSE 2315', 'MATH 3330 can be taken instead')
或者将其作为更易于使用的词典:

line = "CSE 3380,professional,CSE 2315,note: MATH 3330 can be taken instead"
parts = re.match('^(?P<class>.*?), ?(?P<catagory>.*?), ?(?P<prereq>.*?)(?:, ?note: ?(?P<note>.*))$', line).groupdict()

您可以打印re.split(',|,|,|,|:',行)以查看返回的内容,然后比较您需要的内容。是的,我打印了它,但我发现了错误。此在线测试仪很有帮助-您可以打印re.split(',|,|,|:',行)以查看返回的内容,然后比较您需要的内容。是的,我打印了它,但我发现了错误。此在线测试仪很有帮助-