2016-07-21 14 views
0

からCSVファイルに値を返す、私が持っているとCSV:のPython 2.7:入力

T,8,101 
T,10,102 
T,5,103 

、私の入力のための第三欄に、csvファイルを検索する必要があり、見つかった場合、同じ行の2番目の列の値を返します( "102"を検索すると "10"が返されます)。次に、結果を別の計算で使用するために保存する必要があります。 (私はちょうど今結果を印刷しようとしています)私はPython(2週間)を初めて使い、csvファイルの読み書きについて把握したいと思っていました。検索可能なすべての結果は、私に必要な答えを私に与えてくれませんでした。おかげ

ここでは私のコードです:

name = input("waiting") 
import csv 
with open('cards.csv', 'rt') as csvfile: 
    reader = csv.reader(csvfile, delimiter=',') 
    for row in reader: 
     if row[2] == name: 
      print(row[1]) 
+0

本当にcsv-moduleを使用する必要がありますか?小さなファイルの場合は、csv-modulesコマンドを実行する必要がないので、Pythonの標準関数を使用してファイルを読むことをお勧めします。大きなファイルの場合は、データ全体をpandas DataFrameにインポートすることをお勧めします。クローズノート:私はcsv-moduleを使用しないことを勧めません。しかし、私はこの作業がそのcsv-moduleなしでも実行できると思います。私はさらに、デフォルトのCSVモジュールに対してパンダを好むだろう。 – albert

+0

私はフィールド上で計算を行い、その値をファイルに変更するつもりです。ちょうどcsvが書き込みを行う方が簡単だと分かりました。私はまた、カンマ区切り(または私が選んだ文字)の入力文字列を取得して、csv関数はまだ良くないでしょうか?しかし、私は 'input()'の代わりに 'raw_input()'を使用してコードを取得しました – Jason

+0

'raw_input'と' input'があなたにとって苦労している場合は、まずPythonのバージョンPython2とPython3の非常に基本的な違いを使っています。 – albert

答えて

0

私はこのようなCSVモジュールを使用せずに一般的なアプローチを実装し、上記の私のコメントで述べたように:

import io 

s = """T,8,101 
T,10,102 
T,5,103""" 

# use io.StringIO to get a file-like object 
f = io.StringIO(s) 
lines = [tuple(line.split(',')) for line in f.read().splitlines()] 

example_look_up = '101' 

def find_element(look_up): 
    for t in lines: 
     if t[2] == look_up: 
      return t[1] 

result = find_element(example_look_up) 
print(result) 

心に留めておいてください、これはPython3コードです。 Python2で使用している場合print()printに置き換える必要があります。ファイルのようなオブジェクトを取得するためにここでデモ目的で使用しているStringIOに関連するものを変更する必要があります。しかし、このスニペットは、可能な解決策についての基本的な考え方を与えるはずです。