2017-11-22 8 views
1

ここで私の問題ですが、私はリストを通してCSVに対応する値を得る傾向があります。たとえば:リストを介してCSVで対応する値を取得する方法

私は

namelist=[1,2] 

name id value 
1  a  aaa 
2  b  bbb 
3  c  ccc 

よう

やCSVなどのリストを持っていると私はCSVに対応する値を見つけるために、リスト内のすべての要素を使用する傾向があります。例えば1-aaa; 2-bbbのようなものである。これは私が今試したものです:

with open('1.csv','rb') as f: 
reader = csv.DictReader(f) 
for i in namelist: 
    for row in reader: 
     if row['name'] == namelist[i]: 
      print row['value'] 

私は何も得ていません。どうすれば修正できますか? ありがとうございます!

答えて

0

カップルの事:

  1. csv.DictReaderstring:string、ないstring:intの辞書に項目を読み込みます。だから、ネームリストを文字列のリストに変更しました。あるいは、row['name']を整数に変換することもできますが、この方法でネームリストを変換するのがより汎用性が高いと思いました。

  2. if row['name'] in namelist:をチェックして、ネームリストのすべての要素についてcsvファイル全体をループする方がはるかに高速です。

コード:

import csv 

namelist=['1','2'] 
with open('1.csv','rb') as f: 
    reader = csv.DictReader(f) 
    for row in reader: 
     if row['name'] in namelist: 
      print row['value'] 

出力:

aaa 
bbb 
+0

が、これは素晴らしいですあなたの助けに感謝します! LUV – zhou

0

まず、 "with"句の後にインデントを使用する必要があります。

:列の順序は、(私は名前、ID、平均値)は常にようになっている場合は、このソリューションを試すことができます

また
for i in namelist: # in that case if namelist = [1,2] i will be 1 or 2, but you need 0,1 

:そして、問題を引き起こす可能性があります別のものは、このコードの一部であってもよく、

namelist=[1,2] 

with open('1.csv','rb') as f: 
    reader = list(csv.reader(f)) 
    for row in reader: 
     for i in range(len(namelist)): # or if row[0] in namelist: 
      if row[0] == namelist[i]: 
      print row[2] 
関連する問題