读取文件并根据分隔符创建字典

时间:2013-11-27 01:57:15

标签: python

我有一个包含多行项目的文件。结构是一个类,后跟一个类,后面是类中的先决条件。

#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?

2 个答案:

答案 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'] 将拆分字符串,并将所有先决条件作为字符串列表提供给您,无论有多少字符串。

以下是您可以解析任何给定行的一瞥。我使用了splitstrip方法。

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