我有一个包含多行项目的文件。结构是一个类,后跟一个类,后面是类中的先决条件。
#Class, Category, Pre-requisites(amount of them can change)
MATH 2430, preprofessional, Math 2429|Math 2428,
Math 2431, professional, Math 2430|Math 2429|Math 2428,
我最终想要的是一个以类作为键的字典,然后将类别和先决条件作为列表中的值。
之类的东西{'MATH 2430' : ['preprofessional', 'Math 2429','Math 2428']...... }
垂直条是迎面而来的先决条件类的指示器。我遇到的问题是数字或垂直条分隔符可能会有所不同,因此前必备类可能会因行而异。所以我不确定如何根据有多少垂直条来分割
i wrote
zdic = {}
pre_req = file.count("|") # to count how many vertical bars appear
if "|" in file :
prereq = pre_req
for line in file :
course, category, prereq1(depending on bars...) = split("\W+",file)
我如何处理先决条件的数量可能会有所不同的事实?并且取决于有多少,相应地分开操纵并进入dixtionary?
答案 0 :(得分:0)
只需使用split
方法即可。假设你有正在解析的行的最后一部分(包含先决条件),如果你使用split
方法和正确的分隔符(在这种情况下是{{{}},你真的不需要计算任何内容。 1}})。例如,
案例1:
|
案例2:
>>> pre_req = "Math 2430|Math 2429|Math 2428"
>>> pre_req.split("|")
['Math 2430', 'Math 2429', 'Math 2428']
>>> pre_req = "Math 2429|Math 2428"
>>> pre_req.split("|")
['Math 2429', 'Math 2428']
将拆分字符串,并将所有先决条件作为字符串列表提供给您,无论有多少字符串。
以下是您可以解析任何给定行的一瞥。我使用了split
和strip
方法。
split
答案 1 :(得分:0)
这样的事情:
txt='''\
MATH 2430, preprofessional, Math 2429|Math 2428,
Math 2431, professional, Math 2430|Math 2429|Math 2428,'''
d={}
for line in txt.splitlines():
line=line.rstrip(',')
li=[e.strip() for e in line.split(',')]
d[li[0]]=[li[1]]+li[2].split('|')
print d
# {'MATH 2430': ['preprofessional', 'Math 2429', 'Math 2428'], 'Math 2431': ['professional', 'Math 2430', 'Math 2429', 'Math 2428']}
或者,更好的是,使用csv:
import csv
d={}
with open('/tmp/test.csv') as f:
for line in csv.reader(f, skipinitialspace=True):
d[line[0]]=[line[1]]+line[2].split('|')
print d
# {'MATH 2430': ['preprofessional', 'Math 2429', 'Math 2428'], 'Math 2431': ['professional', 'Math 2430', 'Math 2429', 'Math 2428']}