2011-09-12 6 views
3

私は、最初の列が野球選手の名前であり、その後ファイル内の各項目が統計値であるcsvファイルを持っています。私はプレーヤーの名前が統計のタプルと等しくなるようにファイルをインポートできるようにしたいと思います。CSV行を分割する方法です。行[0]は名前で残りの項目はタプルですか?

今、私はこのコードを使用してファイルをインポートする場合:

Orioles = file("Orioles.csv", "rU") 
for row in Orioles: 
    print row 

を、私はこのような何かを得る:

[Nick_Markakis, '.005', '.189', '.070', '.002', '.090'] 
[Adam_Jones, '.005', '.189', '.070', '.002', '.090'] 

を、私は統計はフロートではなく文字列として表示されていたいのですがこのように、プレイヤー名を引き出して、後でそれを使うことができ:

Nick_Markakis = ['.005', '.189', '.070', '.002', '.090'] 
Adam_Jones = ['.005', '.189', '.070', '.002', '.090'] 

答えて

2
Orioles = file("Orioles.csv", "rU") 
stats = dict((row[0], map(float, row[1:])) for row in Orioles) 
# In Python 2.7+: stats = {row[0]: map(float, row[1:]) for row in Orioles} 

さて、あなたはこのような統計情報にアクセスすることができます。プレイヤー名は、それ自身の変数で持つ

print(sum(stats['Nick_Markakis'])) # 0.356 
+1

'map'の代わりに' [in:row [1:]] 'に' [float(stat)]を使用します。 – Wilduck

+1

@Wilduck 'map'は実際にはかなり高速です(私は早すぎる最適化を提案しているわけではありません - それは読みやすくても簡単です) –

+0

助けてくれてありがとう! –

4

は、あなたが考えるほど便利ではありません。そこにISNので、あなたは」(コレクションを反復処理することができませんあなたのコードは固定で壊れやすい(あなたのファイルにプレーヤーの名前が追加または削除されたときに行を追加/削除する必要があります)

しかし、今度は反復することができ、あなたはまだ名前で選手を尋ねることができます。むしろ上記row.split(',')トリックより

player_data = file("Orioles.csv", "rU") 
orioles = dict() 
for row in player_data: 
    row = row.split(',') 
    orioles[row[0]] = tuple(map(float, row[1:])) 

print orioles.keys() 
# ['Adam_Jones', 'Nick_Markakis'] 
print orioles['Adam_Jones'] 
# (0.005, 0.189, 0.07, 0.002, 0.09) 

、おそらく実際のコードでcsvモジュールを使用することをお勧めします。

+0

ヘルプと辞書のヒントをありがとう!非常に役に立ちます。 –

関連する問題