2017-10-16 5 views
-1

je cherche à obtenir une valeur de cellule spécifique dans le fichier csv et compter le nombre des lignes, mais si je compte le nombre avant de lire la cellule spécifique, l'erreur viendra mon code est:index de liste csv hors de portée - python

import os 
import sys 
import csv 

with open('C:\Users\Administrator\Desktop\python test\update_test\datalog.csv','rb') as csvfile: 
    data= csv.reader(csvfile) 
    row_count=sum(1 for row in data) 
    data=list(data) 
    text=data[0][0] 
    print(text) 

    print row_count 

Répondre

1

Vous ne pouvez pas lire deux fois un fichier. sum(1 for row in data) déjà lu toutes les données, donc data = list(data) est une liste vide, parce que le pointeur de fichier est à la fin du fichier et ne retournera pas plus de données à moins que vous rembobinez le fichier au début.

Vous n'avez même pas besoin d'utiliser l'appel sum(), supprimez-le. Vous pouvez obtenir le même nombre avec len(data) après avoir utilisé list() dessus:

with open('C:\Users\Administrator\Desktop\python test\update_test\datalog.csv','rb') as csvfile: 
    data= csv.reader(csvfile) 
    data = list(data) 
    text = data[0][0] 
    print(text) 
    print len(data) 
+0

Merci pour votre réponse en détail, est que de toute façon je peux utiliser pour compter le nombre de lignes d'abord, puis lire la valeur de la cellule? comment rembobiner le fichier ?? merci – panda001

+0

@ panda001: pourquoi avez-vous besoin de le faire en premier? La lecture des données de fichier à deux reprises est * lente * et inefficace. –

+0

@ panda001: 'csvfile.seek (0)' retournera au début. –