Maison >développement back-end >Tutoriel Python >Pourquoi ma sortie CSV Python a-t-elle des retours chariot supplémentaires sous Windows ?

Pourquoi ma sortie CSV Python a-t-elle des retours chariot supplémentaires sous Windows ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-03 19:30:13563parcourir

Why Does My Python CSV Output Have Extra Carriage Returns on Windows?

Problème de retour chariot supplémentaire du fichier de sortie CSV sous Windows en Python

Lors de la génération de fichiers CSV en Python, il est possible d'ajouter par inadvertance un chariot supplémentaire revenir à la fin de chaque ligne. Ce comportement peut être observé dans le code suivant :

import csv

with open('test.csv', 'w') as outfile:
    writer = csv.writer(outfile, delimiter=',', quoting=csv.QUOTE_MINIMAL)
    writer.writerow(['hi', 'dude'])
    writer.writerow(['hi2', 'dude2'])

Sortie attendue :

hi,dude
hi2,dude2

Sortie réelle (Windows) :

hi,dude\r\r\nhi2,dude2\r\r\n

Causes et résolution pour Python 3 :

Dans Python 3, ce problème survient en raison de la traduction de nouvelle ligne universelle par défaut fonctionnalité. Pour le résoudre, ouvrez le fichier avec newline='' pour désactiver cette traduction :

with open('output.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    ...

Causes et résolution pour Python 2 :

Sous Windows en Python 2 , ce problème se produit car CSV est considéré comme un format binaire et rn est le séparateur d'enregistrements. Si le fichier est ouvert en mode texte, Python remplace le n par rn, ce qui entraîne un double retour chariot. La solution est de toujours ouvrir les fichiers en mode binaire :

with open('test.csv', 'wb') as outfile:
    writer = csv.writer(outfile, delimiter=',', quoting=csv.QUOTE_MINIMAL)
    ...

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn