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: P>
ceci, que, l'autre strud> p> 1, 2, 3 p> BlockQuote>
Je fais ce qui suit: p>
- lire dans le fichier CSV et faire l'objet Reader Li>
- 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. ") li>
- attribution du
.Fieldnames code> Attribut à une variable et imprimez-le LI> ol>
Voici un extrait de code pour illustrer: p>
xxx pré> Il en résulte une erreur: p>
AttributeError: '_csv.reader' Object n'a aucun attribut 'Noms de champ' ' P> blockquote>
qui sonne comme le
.Fieldnames code> n'est pas là, mais est dans la documentation de Python 2.6.6 (même version de Python que j'utilise) p> < 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! P>
merci. P> p>
4 Réponses :
Essayez Les objets DicTreader ont l'attribut public suivant: em> p>
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. em> p>
csv.dicterreader code> au lieu de
csv.reader code>. La documentation le dit aussi: p>
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.
Si vous voulez vraiment utiliser csv.reader au lieu de CSV.DicterReader, tout ce que vous avez à faire est de remplacer par p>
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 ' code> (python 3)
Si vous avez besoin du résultat dans une liste, vous pouvez prendre:
print headerList
>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'
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