2016-04-28 6 views
1
import csv 
if __name__ == "__main__": 
    words = ["great" , "thanks"] 
    with open("data/sentiwordnet.tsv", "r") as f: 
     reader = csv.DictReader(f,delimiter='\t') 
     for word in xrange(len(words)): 
      for row in reader: 
       if row['word_en'] == words[word]: 
        print float(row["positive"]) 
        print float(row["negative"]) 
        print row["synset"] 

Результаты:Неожиданный выход во время чтения файла CSV в цикле

0.75 
0.0 
124567 

Результаты выше только для 1-го слова, то есть «большой». Цикл заканчивается здесь - он не переходит к следующему слову.

+0

Вы уверены, что условие действительно для любых слов, предшествующих вашему первым – Natecat

+0

Возможно, 'thanks' в вашем файле отсутствует? –

+1

Вы можете использовать 'for word in words:' вместо того, чтобы быть более явным в названии переменной. –

ответ

5

Как только вы повторяете строки в reader, он не будет волшебно перезагружен. Поменяйте for петли, так что вы итерацию только один раз через reader:.

for row in reader: 
    for word in xrange(len(words)): 

Я просто избежать итерации дважды просто проверить, если каждое слово в наборе слов вы заинтересованы в Он будет работать быстрее :

import csv 

if __name__ == "__main__": 
    words = {"great" , "thanks"} # sets are faster than lists for checking containment 

    with open("data/sentiwordnet.tsv", "r") as f: 
     reader = csv.DictReader(f, delimiter='\t') 

     for row in reader: 
      if row['word_en'] in words: 
       print float(row["positive"]) 
       print float(row["negative"]) 
       print row["synset"] 

Вы можете также рассмотреть вопрос об использовании пакета как pandas для работы с таблицами, как правило, делает вашу жизнь легче.