使用重新拆分从fi构造字典

2024-03-29 09:47:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我写的代码是用重新拆分这些类型的文件将遵循的模式是

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

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

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

我得到一个错误,说“ValueError:需要一个以上的值才能解包”。我不知道为什么。我用这种方法在其他不同的模式线,但对于这个特殊的模式我有麻烦。你知道吗


Tags: 文件方法模式mathbe字符cantaken
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']
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'}

相关问题 更多 >