2016-04-28 1 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"] 

Résultats:sortie inattendue lors de la lecture d'un fichier csv dans une boucle

0.75 
0.0 
124567 

Les résultats ci-dessus sont seulement pour le 1er mot, à savoir « grand ». La boucle se termine ici - elle ne passe pas au mot suivant.

+0

Êtes-vous sûr que la condition if est vraie pour tous les mots après le premier – Natecat

+0

Peut-être que 'merci' n'existe pas dans votre fichier? –

+1

Vous pourriez utiliser 'for word in words '' à la place pour être plus explicite dans votre nom de variable. –

Répondre

5

Une fois que vous parcourez les lignes reader, il ne redémarrera pas par magie. Échanger les boucles for de sorte que vous itérer une seule fois par reader.

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

je venais éviter itérer deux fois par simplement vérifier si chaque mot est un ensemble de mots qui vous intéressent Il va courir plus vite :

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"] 

Vous pouvez également envisager d'utiliser un paquet comme pandas pour travailler avec des tables, il est généralement votre vie plus facile.