2016-06-23 8 views
0

私はPythonにはかなり新しく、奇妙であると思われる問題にぶつかっています。私はcsvfileの最初の列を検索しています。Python CSV検索

私はcsvモジュールを使用しており、ループのネストされたコードをいくつか持っています。私の意図は、途中のループがcsvfileの最初の行から一致するものが見つかるたびに再起動することでした。しかし、代わりに、それは常にcsvで検索されている最後の行から始まります。

私のコードと結果は、私の問題をより明確にします。ここで

number = [1,3,5,6,7,8,1234,324,5,2,35] 

import csv 

with open('...../Documents/pycharm/testcsv.csv', 'rb') as csvimport: 
    csvfile = csv.reader(csvimport) 

    for num in number: 
     print 'looking for ' + str(num) 
     is_in_file = False 
     print 'set to false' 
     for row in csvfile: 
      print 'looking at value ' + row[0] 
      if row[0] == str(num): 
       is_in_file = True 
       print 'match, set to true' 
       break 
     print 'test1' 
     if is_in_file == False: 
      print str(num) + ' not found in file!' 

はIDEで印刷する内容である:

looking for 1 
set to false 
looking at value a 
looking at value 1 
match, set to true 
test1 
looking for 3 
set to false 

注:ここで私がcsvfile内の最初の行を見たい(値A)。代わりに、csvfileの3行目(値 '')を調べます。ここから先の

looking at value 
looking at value 1234 
looking at value 7 
looking at value 1 
looking at value 3 
match, set to true 
test1 

それが最後の行を経験してきたとして、それはすべて一緒にループのための私の内面をスキップします:ここで

looking for 5 
set to false 
looking at value 5 
match, set to true 
test1 
looking for 6 
set to false 
looking at value 6 
match, set to true 
test1 
looking for 7 
set to false 
looking at value 77 
looking at value 23 
looking at value 87 
test1 
7 not found in file! 
looking for 8 
set to false 
test1 
8 not found in file! 
looking for 1234 
set to false 
test1 
1234 not found in file! 
looking for 324 
set to false 
test1 
324 not found in file! 
looking for 5 
set to false 
test1 
5 not found in file! 
looking for 2 
set to false 
test1 
2 not found in file! 
looking for 35 
set to false 
test1 
35 not found in file! 

たcsvfile

a,c,b,d,e 
1,3,4,5,6 
,7,7,,87 
1234,1,98,7,76 
7,8,90,0,8 
1,3,98,0,0 
3,cat,food,20,39 
5,%,3,6,90 
6,2,2,2,3 
77,3,4,3,5 
23,3,4,3,6 
87,5,5,5, 

答えて

0

たcsvfileは、発電機です:初めて動作しますが、2度目にはすぐに戻ります。 これをやって考えてみましょう:

csvfile = list(csv.reader(csvimport)) 

は、その後、あなたが好きなだけ csvfileをスキャンすることができます。

ただし、このコードは、ファイルに対してリニアスキャンを実行しても実際には機能しません。代わりに辞書を使うことを検討してください。ここで

d = dict() 
for r in csvfile: 
    d[r[0]] = r[1:] 

次に、によってあなたの内側のループを置き換える方法は次のとおりです、これは働いていた

if num in d: 
    is_in_file = True 
    print("%d is in file" % num) 
+0

はどうもありがとうございます – apettey