2016-05-03 8 views
1

私は数千の行と一握りの列を持つ大きな.csvファイルを持っています。簡単にするために、それは私が別のエンティティとして各ラインを処理する、文字列のリストを受け取り、スクリプトを書くことが好きで、上のエントリに一致を含む行を見つけたい少し文字列のリストを取得し、別のcsvファイルで検索し、一致する行からフィールドを印刷したいと思っています

Name, ID 
One, 1 
Two, 2 

のように見えますリスト。 一致する行が見つかると、フィールドの1つを新しいファイルに出力したいと思います。例えば

、リスト与えられた:

1 
2 

私は、関連する「名前」値を含むファイルを生成できるようにしたいと思います。

は、これまでのところ私は次のように私のリストファイルの読み込みには問題がありません:

list_file = sys.argv[1] 
f = open(list_file, 'r+') 
ListOfNames = f.read() 

しかし、私は続行する方法について少し困惑しています。私は同様のコードを書いたとき以前、私はraw_input()を使用して文字列をユーザーに入力を求めてきましたし、単にそのような試合をcsvファイルを介して検索:

def Return_Name(ID): 
     file_csv = csv.DictReader(open('file.csv')) 
      for row in file_csv: 
       if row['ID'] == ID: 
        print row['Name'] 

しかし、私は実行する方法がわかりませんよこれはリストを繰り返し処理している間に行われます。誰も助けることができるだろうか?

この質問は最も構造化されていませんが、助けていただければ幸いです。

乾杯

答えて

0

for id in list_ids: 
    Return_Name(id) 

乾杯

+0

これは、CSVファイルを開いて、すべての単一のIDのために読み込みます。 – WreckeR

+0

これは私に最も感謝しました:) WreckeRは大きなリストでは問題になるかもしれませんが、私の目的のためにはこれは素晴らしいことです。 –

0

"in"演算子を使用できますか?

>>> id = 3 
>>> l1 = [1, 2, 3, 4, 5] 
>>> l2 = [6, 7, 8, 9, 10] 
>>> id in l1 
True 
>>> id in l2 
False 

したがって、行['ID']があなたの識別子のリストに含まれているかどうかを確認します。

1

あなたはかなり近いです。 IDのリストを取得するにはReturn_Nameに変更してください。

list_ids = [line.strip() for line in open('list.txt').xreadlines()] 

そして、あなたが掲示ものとすることをを組み合わせた::これは完全にトリックを行う必要があり、IDのリストを読み込むこと

def Return_Names(ID_list): 
    names = [] 
    file_csv = csv.DictReader(open('file.csv')) 
     for row in file_csv: 
      if row['ID'] in ID_list: 
       # print row['Name'] 
       names.append(row['Name']) 
    return names 
+0

ありがとうございました:)これは多くの助けた –

関連する問題