2016-12-06 1 views
0

파일 이름을 취하고 쉼표로 구분 된 값 형식을 사용하여 각 행을 사전 사전에 구문 분석하는 함수 인 구문 분석을 작성합니다. 주어진 예제 파일은 다음과 같습니다파일을 읽고 사전으로 구문 분석하는 함수

id,age,name 
100,31,George 
101,47,Herbert 
103,72,Harriet 

예상 출력 사전은 다음과 같습니다

{'103': {'name': 'Harriet', 'age': '72', 'id': '103'}, '100': {'name': 
'George', 'age': '31', 'id': '100'}, '101': {'name': 'Herbert', 'age': '47', 
'id': '101'}} 

하는 각 라인에서 라인 문자의 끝을 제거하기 위해 문자열의 .strip() 메소드를 사용했는지 확인 구문 분석.

힌트 : 이전 질문의 data_dictionary 함수를 붙여 넣은 다음 각 행에 도움이되도록 구문 분석 함수에서 호출해야합니다. 예를 들어

:

테스트 결과

print(sorted(d["100"].items()))= = [('age', '31'), ('id', '100'), ('name', 'George')] 
print(sorted(d["101"].items()))= [('age', '47'), ('id', '101'), ('name', 'Herbert')] 
print(sorted(d["103"].items())) = [('age', '72'), ('id', '103'), ('name', 'Harriet')] 

이 내가 가진 내 코드입니다. Data_dictionary는 완벽하지만 구문 분석이 필요합니다. 제발 도와 줄 수 없어!

def data_dictionary(keys,values): 

    d = {} 
    for i in range(len(keys)): 
     d[keys[i]] = values[i] 
    return d 


def parse(file): 

    d = {} 
    with open(file) as file_name: 
     for line in file_name: 
      keys = (item.strip() for item in line.split(',')) 
     for line in file_name: 
      values = (item.strip() for item in line.split('/n')) 
      data_dictionary(keys,values) 
      return d 
+0

우리가 사용할 수 있을까? – Chinny84

+0

왜 2 개의 루프가 있습니까? 첫 번째 줄을 읽은 다음 열쇠를 얻고 반복하십시오. – polku

답변

0

발전기 표현으로 이상한 일을하고 있습니다. 이것은 csv 파일입니다. csv 모듈을 사용하여 읽습니다.

import csv 

def parse(file): 
    d = {} 
    with open(file) as f: 
     r = csv.reader(f) 
     _ = next(r) #consume the headers 
     for line in r: 
      d.update({d[0]: {'age': d[1], 'name':d[2]}}) 

    return d 

또는 당신은`기본 키로 id` 그래서 왜 사전의 본문에 추가해야 할 csv.DictReader

def parse(file): 
    d = {} 
    with open(file) as f: 
     r = csv.DictReader(f) 
     for line in r: 
      id = line.pop('id') 
      d.update({id: line}) 
    return d 
관련 문제