Quelqu'un peut-il expliquer cette erreur? AttributeError: 'liste' de l'objet n'a pas d'attribut "coder'
De la recherche que j'ai fait, ce code doit écrire du texte dans un fichier CSV.
import csv
name = "X"
score = "Y"
with open('some.csv', 'wb') as f:
writer = csv.writer(f)
data = [["Name", "Score"],
[name,score]]
f.write(data[0].encode('utf-8'))
writer.writerows(data)
Au premier abord, il m'a jeté une erreur de codage. Après la chasse autour de Débordement de Pile, j'ai trouvé quelque chose sur la nécessité de coder le texte en UTF8. J'ai donc essayé d'encodage avec X. encode(). Ensuite, j'ai obtenu ceci:
f.write(data[0].encode('utf-8'))
AttributeError: 'list' object has no attribute 'encode'
Je ne peux pas trouver une réponse quant à pourquoi ce qui se passe. Quelqu'un peut-il expliquer pourquoi j'obtiens cette erreur?
data[0]
est["Name", "Score"]
pas une chaîne.
Vous devez vous connecter pour publier un commentaire.
Utiliser le csv écrivain que vous avez créé. Ne pas écrire
f
directement. Déposer lesf.write
ligne:Contenu de
some.csv
:Remarque c'est en supposant que Python 2. Si vous êtes actuellement sur Python 3, et sont l'écriture des caractères non-ASCII, le
open
différents paramètres.writerows
prend une liste de listes, comme ci-dessus.writerow
prend la forme d'une liste des éléments dans la ligne. Donc, si vous voulez juste direwriter.writerow([name,score])
pour chaque ligne que vous souhaitez ajouter. lecsv.writer
prend soin d'ajouter les séparateurs et les retours à la ligne.La raison que vous obtenez cette erreur est parce que vous êtes à essayer de coder une liste, pas une chaîne de caractères.
J'ai fait un code de travail qui a écrit "Nom" dans un .fichier csv avec ce script.
Sur la ligne que j'ai changé, j'ai ajouté un supplément de
[0]
. Vous de la liste de données est imbriqué, ce qui signifie qu'il n'y a plus d'une liste à l'intérieur d'elle.Si vous voulez obtenir le
"Name"
chaîne, vous devez référencedata[0][0]
. Il obtient le premier élément dans la liste externe, avec est["Name", "Score"]
. La prochaine[0]
obtient le premier élément de cette liste, qui est"Name"
.Je me suis débarrassé de la ligne avec
writer.writerows(data)
. C'était en me jetant une erreur et je n'avais aucune idée de ce qu'il était censé faire.