2016-11-13 4 views
-1

나는 어제이 질문을했으나 여전히 그것에 붙어 있습니다. 현재 파일을 올바르게 읽는 함수를 작성했지만 몇 가지 문제가 있습니다.CSV 파일을 사전으로 변환

내가 겪고있는 주된 문제는 필자가 파일의 첫 번째 줄을 건너 뛰고 사전으로 반환할지 잘 모르겠다는 것입니다. 내가 지금 무엇을

다음
sample_dict = { 
     "Pablo Picasso": [("Guernica", 1937, 349.0, 776.0, "oil paint", "Spain")], 
     "Leonardo da Vinci": [("Mona Lisa", 1503, 76.8, 53.0, "oil paint", "France"), 
          ("Portrait of Isabella d'Este", 1499, 63.0, 46.0, "chalk", "France"), 
          ("The Last Supper", 1495, 460.0, 880.0, "tempera", "Italy")], 
     "Vincent van Gogh": [("Cafe Terrace at Night", 1888, 81.0, 65.5, "oil paint", "Netherlands"), 
          ("Self-Portrait with Bandaged Ear",1889, 51.0, 45.0, "oil paint", "USA")] 
     } 

것 :

나는 위와 같은 파일을 읽고 다음과 같습니다 사전으로 변환 할 필요가
"Artist","Title","Year","Total Height","Total Width","Media","Country" 
"Pablo Picasso","Guernica","1937","349.0","776.0","oil paint","Spain" 
"Vincent van Gogh","Cafe Terrace at Night","1888","81.0","65.5","oil paint","Netherlands" 
"Leonardo da Vinci","Mona Lisa","1503","76.8","53.0","oil paint","France" 
"Vincent van Gogh","Self-Portrait with Bandaged Ear","1889","51.0","45.0","oil paint","USA" 
"Leonardo da Vinci","Portrait of Isabella d'Este","1499","63.0","46.0","chalk","France" 
"Leonardo da Vinci","The Last Supper","1495","460.0","880.0","tempera","Italy" 

: 다음 파일 중 하나의 예입니다 멀리. 현재 코드는 작동하지만 위의 예와 같이 파일을 사전으로 변환하지 않습니다. 어떤 도움 주셔서 감사합니다

def convertLines(lines): 
    head = lines[0] 
    del lines[0] 
    infoDict = {} 
    for line in lines: 
     infoDict[line.split(",")[0]] = [tuple(line.split(",")[1:])] 
    return infoDict 

def read_file(filename): 
    thefile = open(filename, "r") 
    lines = [] 
    for i in thefile: 
     lines.append(i) 
    thefile.close() 
    mydict = convertLines(read_file(filename)) 
    return lines 

내 코드가 약간 변경되면 정확한 결과가 나타나지 않습니까? 아니면 다르게 접근해야합니까? 현재 코드가 전체 파일을 읽는 것으로 나타납니다. 어떤 도움 주셔서 감사합니다

편집 : @Julien 오늘 수정 사항을 작성하기 전까지 재귀 오류가 발생했습니다 (올바르게는 안됨). 그것을 할 필요가있는 경우

현재 함수가 무한 자체를 호출
def read_file(filename): 
    with open(filename, "r") as thefile: 
     mydict = convertLines(thefile.readlines())) 
     return mydict 

... 그런 다음 convertLines 기능을 수정 :

+0

어떤 결과가 당신에게 불만을 느끼게합니까? 이것은 관련성이있는 정보이므로 친절하게 공유하십시오! – Julien

+0

나는 목록에 추가하는 대신 각 아티스트의 각 결과를 덮어 쓰는 중입니다 ... – Julien

+0

현재 코드에서 실제로 재귀 오류가 발생하지만 기본적으로 키가 아티스트 인 사전을 만들 수 없었습니다. 이름과 값은 그림입니다. 위 예제의 경우 파일에서 이름을 반복 할 수 있고 값은 그림입니다 (피카소 1, 다빈치 3, 반 고흐 2) – n00bprogrammer22

답변

0

당신은 그냥이 원하는.

+0

고맙습니다. 제대로 된 트랙이라고 생각합니다. convertLines 함수가 잘못되었습니다. 이제는 "최대 재귀 깊이가 초과되었습니다"라고 말합니다. – n00bprogrammer22

+0

"Diff는 x 자입니다."라고 말하면서 감사합니다. x는 모든 경우에 작게해야하는 2000과 같은 터무니없는 숫자입니다. 이 문제의 원인이 무엇인지 아십니까? – n00bprogrammer22

+0

어떻게 그럴 수 있습니까? 코드에는 'Diff'가 없습니다. [ask]를 읽어야합니다. – Julien

0

코드를 단순화해야하지만 헤더 행을 처리해야합니다.

from collections import defaultdict 
import csv 

artists = defaultdict(list) 

with open('artists.csv', 'r') as csvfile: 
    reader = csv.reader(csvfile,delimiter=',') 
    for row in reader: 
     artists[row[0]].append(row[1:-1])