Gérer les guillemets dans les fichiers CSV avec quoting en Python

1. À propos des guillemets dans les fichiers CSV

Dans un fichier CSV, les guillemets permettent notamment de protéger une valeur contenant un séparateur, un saut de ligne ou le caractère utilisé comme guillemet. Le module csv de Python gère ce comportement grâce au paramètre quoting.

Par défaut, le module csv utilise généralement le caractère " comme caractère de citation. Par exemple, si une valeur contient une virgule alors que la virgule est le séparateur, csv.writer() place automatiquement cette valeur entre guillemets.

Le programme suivant écrit une valeur contenant une virgule. Avec le comportement par défaut, le champ "Python, Java" est automatiquement placé entre guillemets dans le fichier.

Sortie :

Le contenu du fichier langages.csv est alors le suivant. Les guillemets permettent de signaler que la virgule située dans "Python, Java" appartient au contenu du champ et ne constitue pas un séparateur de colonnes.

Sortie :

Le paramètre quoting accepte plusieurs constantes du module csv. Parmi les plus importantes, on trouve csv.QUOTE_MINIMAL, csv.QUOTE_ALL, csv.QUOTE_NONNUMERIC et csv.QUOTE_NONE.

2. Utiliser csv.QUOTE_MINIMAL et csv.QUOTE_ALL

Utiliser csv.QUOTE_MINIMAL

csv.QUOTE_MINIMAL correspond au comportement habituel de csv.writer(). Les champs sont placés entre guillemets uniquement lorsque cela est nécessaire, notamment lorsqu'ils contiennent le séparateur, le caractère de citation ou certains caractères de fin de ligne.

Dans l'exemple suivant, seul le champ contenant une virgule nécessite des guillemets.

Sortie :

Le fichier obtenu contient des guillemets uniquement autour de la valeur qui contient le séparateur.

Sortie :

Utiliser csv.QUOTE_ALL

Avec csv.QUOTE_ALL, tous les champs écrits dans le fichier sont placés entre guillemets, qu'ils contiennent ou non un caractère spécial.

Sortie :

Cette fois, toutes les valeurs du fichier sont placées entre guillemets.

Sortie :

3. Utiliser csv.QUOTE_NONNUMERIC

csv.QUOTE_NONNUMERIC demande au writer de placer entre guillemets les valeurs qui ne sont pas numériques. Les objets numériques tels que les entiers et les nombres flottants sont écrits sans guillemets.

Dans l'exemple suivant, les noms sont des chaînes de caractères tandis que les âges et les notes sont fournis au writer sous forme de nombres.

Sortie :

Les chaînes de caractères sont placées entre guillemets, tandis que les valeurs numériques restent sans guillemets.

Sortie :

Lors de la lecture avec quoting=csv.QUOTE_NONNUMERIC, les champs non placés entre guillemets sont convertis en nombres flottants. Pour illustrer clairement ce comportement, utilisons un fichier sans ligne d'en-tête contenant uniquement des noms entre guillemets et des nombres non cités.

Sortie :

Cette conversion automatique explique pourquoi il faut utiliser QUOTE_NONNUMERIC avec précaution lors de la lecture : tout champ non cité doit pouvoir être interprété comme un nombre flottant.

4. Utiliser csv.QUOTE_NONE et escapechar

La constante csv.QUOTE_NONE indique au module csv de ne pas utiliser les guillemets pour protéger les champs. Lorsqu'une valeur contient un caractère nécessitant une protection, il faut alors généralement définir un caractère d'échappement avec le paramètre escapechar.

Dans l'exemple suivant, le caractère antislash est utilisé pour échapper la virgule présente à l'intérieur d'une valeur.

Sortie :

Dans le fichier obtenu, la virgule appartenant au contenu du deuxième champ est précédée du caractère d'échappement.

Sortie :

Pour relire correctement ce fichier, on utilise les mêmes paramètres. Le lecteur comprend alors que la virgule échappée appartient au champ "Python, Java".

Sortie :

Lorsque QUOTE_NONE est utilisé pour l'écriture sans escapechar alors qu'un champ contient un caractère qui doit être échappé, csv.writer() peut lever une csv.Error. Il est donc important de définir une stratégie d'échappement adaptée.

5. Personnaliser quotechar et gérer les guillemets dans les données

Modifier le caractère de citation avec quotechar

Le paramètre quotechar permet de choisir le caractère utilisé pour entourer les champs. Par défaut, il s'agit du guillemet double ". L'exemple suivant utilise l'apostrophe comme caractère de citation avec QUOTE_ALL.

Sortie :

Le contenu du fichier utilise maintenant l'apostrophe comme caractère de citation.

Sortie :

Gérer un guillemet présent dans une valeur

Un champ peut lui-même contenir le caractère utilisé comme guillemet. Avec le comportement par défaut doublequote=True, Python double le guillemet présent dans la valeur afin de le représenter correctement dans le fichier CSV.

Sortie :

Le champ contenant les guillemets est placé entre guillemets et les guillemets internes sont doublés conformément au format CSV.

Sortie :

Lors de la lecture du fichier avec csv.reader(), les guillemets de protection sont interprétés automatiquement et la valeur originale est reconstruite.

Sortie :

Utiliser doublequote=False avec escapechar

Il est possible de désactiver le doublement du caractère de citation avec doublequote=False. Dans ce cas, un escapechar peut être utilisé pour échapper les guillemets présents dans les données.

Sortie :

Les guillemets appartenant au contenu sont alors précédés du caractère d'échappement.

Sortie :

6. À retenir !

Le paramètre quoting du module csv permet de contrôler la manière dont les champs d'un fichier CSV sont protégés par des guillemets. Le choix du mode dépend du format que l'on souhaite produire ou lire.

  • csv.QUOTE_MINIMAL ajoute des guillemets uniquement lorsque cela est nécessaire.
  • csv.QUOTE_ALL place tous les champs entre guillemets.
  • csv.QUOTE_NONNUMERIC demande au writer de citer les valeurs non numériques.
  • Avec un reader configuré en QUOTE_NONNUMERIC, les champs non cités sont convertis en nombres flottants.
  • csv.QUOTE_NONE désactive l'utilisation des guillemets pour protéger les champs.
  • Avec QUOTE_NONE, escapechar permet d'échapper les caractères qui doivent être protégés.
  • quotechar permet de personnaliser le caractère utilisé comme guillemet.
  • Le caractère de citation par défaut est le guillemet double ".
  • Avec doublequote=True, un guillemet présent dans une valeur est doublé lors de l'écriture lorsqu'il doit être échappé.
  • Une configuration cohérente entre l'écriture et la lecture garantit une interprétation correcte des données CSV.

Le programme suivant compare simplement les deux modes les plus courants : QUOTE_MINIMAL et QUOTE_ALL. La classe StringIO permet ici d'observer directement le texte CSV produit sans créer de fichier sur le disque.

Sortie :

 




Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


loader-image
Le prix initial était : € 11,00.Le prix actuel est : € 10,00.
Le prix initial était : € 6,00.Le prix actuel est : € 5,00.



Leave a Reply

Your email address will not be published. Required fields are marked *