2013-11-27 2 views
0

파일이 여러 줄로 구성된 파일이 있습니다. 구조는 클래스이고, 그 다음에 카테고리가 이어지고 클래스의 전제 조건이 뒤 따른다.파일 읽기 및 구분 기호 기반 사전 작성

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

수직 막대 같은 숫자 또는 세로 막대 구분이 그렇게 다를 수 있습니다 사전 prequisite 클래스 라인에 따라 다를 수 있다는 것이다 다가오는 전제 조건 classes.The 문제 메신저에 실행의 지표입니다. 그래서 확실 메신저없는 방법이에 따라 분할 얼마나 많은 수직 막대 전 미리 필요한 클래스의 수는 다를 수 있다는 사실을 다루는 어떻게

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) 

? 얼마나 많은 사람들이 거기에 따라 쪼개어서 딕셔너리를 조작하고 들어갈 수 있습니까?

+0

는 쉼표 것을 후행 한 파일을합니까? – dawg

+0

음침표 각 라인 다음에 쉼표 –

답변

0

그냥 split 방법을 사용하십시오. 구문 분석하는 행의 마지막 부분 (전제 조건 포함)이 있다고 가정하면 split 메소드를 적절한 구분 기호 (이 경우 |)와 함께 사용하면 아무 것도 세지 않아도됩니다. 예를 들어,

사례 1 :

>>> pre_req = "Math 2430|Math 2429|Math 2428" 
>>> pre_req.split("|") 
['Math 2430', 'Math 2429', 'Math 2428'] 

사례 2 :

>>> pre_req = "Math 2429|Math 2428" 
>>> pre_req.split("|") 
['Math 2429', 'Math 2428'] 

split은 문자열을 분할하고 거기에 얼마나 많은 상관없이 당신에게 문자열 목록, 모든 전제 조건을 제공하지 않습니다 아르.

다음은 주어진 라인을 파싱 할 수있는 방법을 보여줍니다. 나는 stripsplit 방법을 사용했습니다. 이 같은

>>> line = "MATH 2430, preprofessional, Math 2429|Math 2428," 
>>> line = line.strip().split(",") # This gives you a list of strings 
>>> d = {} 
>>> d[line[0]] = [line[1]] + line[2].strip().split("|") 
>>> d 
{'MATH 2430': [' preprofessional', 'Math 2429', 'Math 2428']} 
+0

이옵니다. 그러나 클래스를 키로 사용하여 쉼표가 분리 기호로 필요합니다. 그런 다음 전제 조건을 목록의 값으로 따라야합니다. –

+0

@ZachSantiago'split'이 거기에 적용됩니다. 게다가. 나는 이것을 보여주기 위해 작은 스 니펫을 추가했습니다. – slider

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