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

时间:2013-11-27 05:33:06

标签: python

即时阅读文件,文件中的这一行给我带来了麻烦。它是

CSE 3380,professional,CSE 2315,note: MATH 3330 can be taken instead

我写的用于拆分的代码是使用re.split模块来遵循这些类型的文件将遵循的模式

class(comma) catagory(comma) prereq class(comma) note(semicolon)

theres多条线都以相同的方式构建,但有些线条有破折号和其他字符,所以基于非字母字符分割的方法不会有帮助。我想分成逗号,逗号,逗号,分号的东西

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

我收到错误消息“ValueError:需要超过1个值才能解压缩”。我不知道为什么。我在其他不同的图案线条中使用了这种方法,但对于这种特殊的图案,我遇到了麻烦。

2 个答案:

答案 0 :(得分:2)

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

>>> 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']

答案 1 :(得分:2)

line = "CSE 3380,professional,CSE 2315,note: MATH 3330 can be taken instead"
parts = re.match('^(.*?), ?(.*?), ?(.*?)(?:, ?note: ?(.*))$', line).groups()

然后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设置为:

{'note': 'MATH 3330 can be taken instead', 'prereq': 'CSE 2315', 'catagory': 'professional', 'class': 'CSE 3380'}