<?xml version="1.0"?>
<rss xmlns:php="http://php.net/xsl" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Fichiers CSV en Python - Chicoree</title><link>http://www.chicoree.fr/w/Fichiers_CSV_en_Python</link><atom:link href="http://www.chicoree.fr/w/Fichiers_CSV_en_Python?action=toFeed" rel="self" type="application/rss+xml"/><description><![CDATA[Le format CSV est un format de fichier courant pour l'échange de données tabulaires (sous forme de tableaux) entre applications. CSV, pour Comma-separated values, ou en français « valeurs séparées par des virgules », est un format texte dans lequel les données sont enregistrées ligne par ligne, et où les valeurs sont séparées par une virgule. Si le format CSV semble simple et universel en apparence, il en existe cependant de nombreuses variantes, par exemple pour utiliser un autre séparateur que la virgule. La RFC4180 — Common Format and MIME Type for Comma-Separated Values (CSV) Files est une tentative pour normaliser ce format. Mais dans la pratique, un lecteur CSV doit être assez souple pour pouvoir s'adapter à différentes situation.
Ainsi, face à un format commun mais recélant son lot de subtilités, Python propose en standard un module pour produire et lire des fichiers CSV. C'est ce module que je vais vous présenter ici.
]]></description><item><title>1 Mon fichier CSV de test</title><link>http://www.chicoree.fr/w/Fichiers_CSV_en_Python#Mon_fichier_CSV_de_test</link><description><![CDATA[<p>Dans la suite de ce document, les exemples reposeront sur le fichier de test CSV suivant:
</p>]]></description></item><item><title>2 Principes généraux du module Python CSV</title><link>http://www.chicoree.fr/w/Fichiers_CSV_en_Python#Principes_g.C3.A9n.C3.A9raux_du_module_Python_CSV</link><description><![CDATA[<p>Le <b>module Python <tt><a>csv</a></tt></b> repose sur deux classes principales:
</p>]]></description></item><item><title>3 Lecture d'un flux CSV</title><link>http://www.chicoree.fr/w/Fichiers_CSV_en_Python#Lecture_d.27un_flux_CSV</link><description><![CDATA[<p>L'exemple le plus basique d'utilisation consiste à <b>lire un flux CSV à partir d'un fichier</b>:
</p>]]></description></item><item><title>3.1 Lecture à partir d'un fichier</title><link>http://www.chicoree.fr/w/Fichiers_CSV_en_Python#Lecture_.C3.A0_partir_d.27un_fichier</link><description><![CDATA[<p>L'exemple le plus basique d'utilisation consiste à <b>lire un flux CSV à partir d'un fichier</b>:
</p>]]></description></item><item><title>3.2 Extraction de colonnes</title><link>http://www.chicoree.fr/w/Fichiers_CSV_en_Python#Extraction_de_colonnes</link><description><![CDATA[<p>Comme le laisse supposer l'affichage précédent, chaque ligne extraite dans la boucle <i>for</i> est une liste. Il est donc facile d'accéder aux éléments individuels de chaque enregistrement – par exemple pour extraire la première et la troisième colonne:
</p>]]></description></item><item><title>3.3 Lecture dans un dictionnaire</title><link>http://www.chicoree.fr/w/Fichiers_CSV_en_Python#Lecture_dans_un_dictionnaire</link><description><![CDATA[<p>En plus du <i>lecteur</i> utilisé jusqu'à présent, le module <tt>csv</tt> offre la classe <tt><a>csv.DictReader</a></tt> qui permet de <b>récupérer les enregistrements sous la forme d'un dictionnaire</b> plutôt que d'un tableau. Celle-ci se base sur la convention qui veut que le nom des colonnes soit donné dans le premier enregistrement (la première <i>ligne</i>):
</p>]]></description></item><item><title>3.4 Dialectes</title><link>http://www.chicoree.fr/w/Fichiers_CSV_en_Python#Dialectes</link><description><![CDATA[<p>Le problème majeur du format CSV est son <b>manque de standardisation</b> ce qui a donné naissance à différents <i>dialectes</i>. Ainsi, <i>normalement</i> la <i>virgule</i> est utilisée pour séparer les champs. Mais d'autres caractères sont aussi couramment utilisés. En particulier le <i>point-virgule</i> dans les logiciels francisés: en effet, ce caractère permet d'éviter la confusion avec la virgule du séparateur décimal. Mais il existe également d'autres variations, et à y regarder de plus près, bien d'autres formats de fichiers peuvent s'apparenter à du CSV. Par exemple, sur un système Unix, les fichiers <tt><a>/etc/passwd</a></tt> ou <tt><a>/etc/groups</a></tt> peuvent être assimilés à des fichiers CSV dont le séparateur serait le <i>deux-points</i>.
</p>]]></description></item><item><title>3.5 Type des données numériques</title><link>http://www.chicoree.fr/w/Fichiers_CSV_en_Python#Type_des_donn.C3.A9es_num.C3.A9riques</link><description><![CDATA[<p>Jusqu'à présent, toutes les données que nous avons relues l'étaient sous forme de chaînes de caractères. Or, souvent, le format <b>CSV est utilisé pour échanger des données numériques</b>. Le module <tt>csv</tt> offre la possibilité de faire la conversion automatiquement des données numériques. Celles-ci seront identifiées comme telles par le module <tt>csv</tt> si elles respectent la syntaxe de Python pour les nombres <i>et</i> si elles ne sont pas encadrées par des délimiteurs de chaîne dans le document CSV source.
</p>]]></description></item><item><title>4 Écrire dans un flux CSV</title><link>http://www.chicoree.fr/w/Fichiers_CSV_en_Python#.C3.89crire_dans_un_flux_CSV</link><description><![CDATA[<p>Maintenant que nous avons passé beaucoup de temps sur la lecture d'un flux CSV, abordant au passage la notion de <i>dialecte</i>, l'écriture ne devrait pas être compliquée à comprendre. Ainsi, puisque le module <tt>csv</tt> definit un <i>reader</i> pour lire un flux CSV, comme on peut l'espérer il définit aussi un <i>writer</i> pour écrire dans un flux:
</p>]]></description></item><item><title>4.1 Générer un flux CSV</title><link>http://www.chicoree.fr/w/Fichiers_CSV_en_Python#G.C3.A9n.C3.A9rer_un_flux_CSV</link><description><![CDATA[<p>Maintenant que nous avons passé beaucoup de temps sur la lecture d'un flux CSV, abordant au passage la notion de <i>dialecte</i>, l'écriture ne devrait pas être compliquée à comprendre. Ainsi, puisque le module <tt>csv</tt> definit un <i>reader</i> pour lire un flux CSV, comme on peut l'espérer il définit aussi un <i>writer</i> pour écrire dans un flux:
</p>]]></description></item><item><title>4.2 Dialecte pour l'écriture</title><link>http://www.chicoree.fr/w/Fichiers_CSV_en_Python#Dialecte_pour_l.27.C3.A9criture</link><description><![CDATA[<p>Les exemples de la section précédente ne posaient pas de problèmes majeurs à <tt>csv</tt> puisque les données ne contenaient aucun des caractères <i>spéciaux</i> reconnus dans un fichier CSV. A savoir, en standard, la virgule, les guillemets et le retour à la ligne. Voyons maintenant comment il se comporte avec des données <i>piégées</i>:
</p>]]></description></item><item><title>5 Support Unicode et données binaires</title><link>http://www.chicoree.fr/w/Fichiers_CSV_en_Python#Support_Unicode_et_donn.C3.A9es_binaires</link><description><![CDATA[<p>La documentation du module <tt>cvs</tt> insiste sur le fait que celui-ci <b>ne supporte pas les données Unicode</b>. En réalité, pour être plus précis, le problème est surtout le non-support des encodages UTF-16 et UTF-32. Or les chaînes <i>unicode</i> Python utilisent un de ces deux encodages. À cela, il faut ajouter des <b>problèmes avec les données contenant le caractère NUL</b>. Pour toutes ces raisons, il est préférable de limiter l'usage de ce module à des données ASCII ou unicode encodées en UTF-8. Ce qui exclu aussi l'import/export direct de données binaires à l'aide de ce module. Si vous devez absolument manipuler de telles données, il sera sans doute judicieux de passer par un encodage capable de représenter les données binaires en ASCII (comme <a>Base64</a>, par exemple).
</p>]]></description></item><item><title>6 Un dernier mot</title><link>http://www.chicoree.fr/w/Fichiers_CSV_en_Python#Un_dernier_mot</link><description><![CDATA[<p>Si cet article est déjà long, il passe quand même sous silence un certain nombres d'options et de fonctionnalités du module Python <tt>csv</tt>. Comme toujours, la lecture du manuel de référence apportera plus de lumière sur les points laissés dans l'ombre. Néanmoins, vous devriez pouvoir disposer du nécessaire pour importer/exporter vos données au format CSV dans le cas général. Et même au delà, puisque comme nous l'avons vu, ce module est assez souple pour s'adapter à d'autre format de fichiers <i>texte délimité</i>.
</p>]]></description></item><item><title>7 Références</title><link>http://www.chicoree.fr/w/Fichiers_CSV_en_Python#R.C3.A9f.C3.A9rences</link><description/></item></channel></rss>
