8 votes

TypeError: l'objet 'lecteur de '_csv' n'a pas d'attribut '__getitem__'

Voici mon code jusqu'à présent :

import csv
reader = csv.reader(open('new_file.txt','r'),delimiter=' ')
row1 = reader[0]
row2 = reader[1]
row3 = reader[2]

Voici mon new_file.txt :

this is row one
this is row two
this is row three

Quand je l'exécute, j'obtiens l'erreur suivante :

Traceback (most recent call last):
  File "/home/me/Documents/folder/file.py", line 211, in 
    row1 = reader[0]
TypeError: '_csv.reader' object has no attribute '__getitem__'

Comment puis-je corriger cela ?

Merci.

18voto

Martijn Pieters Points 271458

Un objet csv.reader() n'est pas une séquence. Vous ne pouvez pas accéder aux lignes par index.

Il faudrait 'engloutir' tout l'itérable dans une liste pour cela :

rows = list(reader)
row1 = rows[0]
row2 = rows[1]
row3 = rows[2]

Ce n'est généralement pas une bonne idée. Vous pouvez plutôt demander la valeur suivante de l'itérateur avec la fonction next() :

reader = csv.reader(open('new_file.txt','r'),delimiter=' ')
row1 = next(reader)
row2 = next(reader)
row3 = next(reader)

2voto

chapagain Points 6536

Vous pouvez boucler sur le reader et ensuite accéder aux éléments row:

import csv
reader = csv.reader(open('new_file.txt','r'),delimiter=' ')
for row in reader:
    row1 = row[0]
    row2 = row[1]
    row3 = row[3]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X