7
votes

csvreader.FieldNames non reconnus comme un attribut d'un objet de lecteur CSV dans Python

J'essaie d'extraire l'en-tête d'un fichier CSV en Python à l'aide du module CSV.

Le fichier CSV est assez plat et ressemble à quelque chose comme:

ceci, que, l'autre

1, 2, 3

Je fais ce qui suit:

  1. lire dans le fichier CSV et faire l'objet Reader
  2. Appuyez sur l'itérateur du lecteur à la ligne suivante pour la forcer à accéder à la première ligne au moins une fois (à partir de la documentation du module CSV: "Si non passé comme paramètre lors de la création de l'objet, cet attribut est initialisé sur le premier accès ou lorsque Le premier enregistrement est lu dans le fichier. ")
  3. attribution du .Fieldnames Attribut à une variable et imprimez-le

    Voici un extrait de code pour illustrer: xxx

    Il en résulte une erreur:

    AttributeError: '_csv.reader' Object n'a aucun attribut 'Noms de champ' '

    qui sonne comme le .Fieldnames n'est pas là, mais est dans la documentation de Python 2.6.6 (même version de Python que j'utilise) < P> J'apprécierais tout aperçu de ce mystère. S'il existe une méthode alternative pour extraire l'en-tête qui serait génial aussi!

    merci.


0 commentaires

4 Réponses :


5
votes

Essayez csv.dicterreader au lieu de csv.reader . La documentation le dit aussi:

Les objets DicTreader ont l'attribut public suivant:

csvreader.fieldNames - Si non passé en tant que paramètre lors de la création de l'objet, cet attribut est initialisé lors du premier accès ou lorsque le premier enregistrement est lu dans le fichier.

http://docs.python.org/library/csv.html < / p>


2 commentaires

Vous avez tout à fait raison, je dois avoir mal interprété la documentation: P J'utiliserais DicterRer, mais il arrive que j'ai besoin d'une liste. Merci pour le conseil cependant!


UHM Qu'est-ce que "Cet attribut est initialisé sur le premier accès" supposé vouloir dire? Pour moi, cela ressemble à la classe fera une initialisation paresseuse des noms de terrain à tout moment.



11
votes

Si vous voulez vraiment utiliser csv.reader au lieu de CSV.DicterReader, tout ce que vous avez à faire est de remplacer xxx

par xxx / p>


2 commentaires

Merci! Cela a vraiment bien fonctionné. Je peux voir pourquoi Dicterreader est probablement une meilleure méthode à utiliser, mais pour ma demande, j'ai besoin d'une liste.


Cela n'a pas fonctionné pour moi. J'obtiens ensuite '_ csv.reader' objet 'objet n'a aucun attribut' Suivant ' (python 3)



0
votes

Si vous avez besoin du résultat dans une liste, vous pouvez prendre:

print headerList


0 commentaires

0
votes
>Apropos of 'rfd_header = reader.next' above, I got this error message in IDLE 3.8.3
>File "<pyshell#2>", line 16, in read_csv_fieldnames
>   fieldnames = csvreader.next()
>AttributeError: '_csv.reader' object has no attribute 'next'
>I fixed it by reading the docco on 'Python.org - CSV File Reading and Writing' 
>Under the subheading 'Reader Objects' on the last line of page 6 it says;
>...Usually you should call this as next(reader)
>1-0 for the Python 'docco'

1 commentaires

Bien que ce code puisse résoudre la question, y compris une explication de la manière et de la raison pour laquelle cela résoudra le problème aiderait à améliorer la qualité de votre poste et entraînera probablement plus de votes ultérieurs. N'oubliez pas que vous répondez à la question pour les lecteurs à l'avenir, pas seulement la personne qui demande maintenant. Veuillez éditer votre réponse pour ajouter des explications et donner une indication de quelles limitations et hypothèses s'appliquent. Voir plus de détails sur la façon de répondre à ce lien: Stackoverflow.com/help/how-to-answer