2016-11-13 9 views
-1

私は昨日この質問をしましたが、依然としてそれに固執しています。私は現在、ファイルを正しく読み込む関数を書いていますが、いくつかの問題があります。辞書にCSVファイルを変換する

私が持っている主な問題は、何とかファイルの最初の行をスキップする必要があり、私が辞書として返すかどうかわからないということです。ここでは、ファイルのうちの一つの例である:

"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" 

私は上記のようなファイルを読み込むと、このように見えるの辞書に変換する必要があります。

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")] 
     } 

ここで私はそう持っているものです遠い私の現在のコードは動作しますが、上記の例のようにファイルを辞書に変換しません。任意のヘルプ

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私はいくつかのリビジョンを作成するまで、それは再帰エラーを与えているまで、(正確には)動作しませんでした。

+0

あなたはどのような結果を得ていますか?これは関連性のある種類の情報なので、共有してください! – Julien

+0

私はあなたがリストに追加するのではなく、各アーティストのそれぞれの結果を上書きするだけだと確信しています... – Julien

+0

私の現在のコードは実際に再帰エラーを与えていますが、基本的に私はキーがアーティストである辞書を作成できません名前と値は絵ですので、上の例ではファイル内で名前を繰り返すことができますが、その値は絵画です(ピカソの場合は1つ、ダ・ヴィンチの場合は3つ、ゴッホの場合は2つ) – n00bprogrammer22

答えて

0

あなたはただ、この欲しい:あなたの現在の関数が無限に自分自身を呼び出している...そして、それが必要な場合は、あなたのconvertLines機能を修正

def read_file(filename): 
    with open(filename, "r") as thefile: 
     mydict = convertLines(thefile.readlines())) 
     return mydict 

を。

+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])