Maison >développement back-end >Tutoriel Python >Pourquoi mon fichier CSV Python ajoute-t-il des retours chariot supplémentaires sous Windows ?
Lors de l'écriture d'un fichier CSV en Python sur un système Windows, un problème inattendu survient lorsqu'un r supplémentaire Le caractère apparaît à la fin de chaque ligne du fichier. Cet écart par rapport à la terminaison de ligne rn attendue pose problème, laissant les développeurs s'interroger sur la cause sous-jacente et s'il s'agit d'un comportement intentionnel.
Pour approfondir la source de ce problème, analysons l'extrait de code fourni :
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'])
Ce code est conçu pour générer un fichier CSV nommé test.csv contenant deux lignes de données : ['salut', 'mec'] et ['salut2', 'mec2']. Cependant, après inspection du fichier généré, nous constatons que chaque ligne est suffixée d'un caractère r supplémentaire.
Pour comprendre ce comportement, nous nous tournons vers la documentation Python du module csv. Selon la documentation, il est recommandé d'ouvrir le fichier avec newline='' sur toutes les plateformes pour désactiver la traduction universelle des nouvelles lignes.
Pour Python 3 :
Par défaut , sous Windows, le module csv utilise la traduction universelle de nouvelles lignes, qui traduit le terminateur de ligne rn en n lors de l'écriture dans le fichier. Pour empêcher cette traduction et conserver le terminateur de ligne rn d'origine, il est nécessaire d'ouvrir le fichier avec newline='', comme indiqué ci-dessous :
with open('output.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) ...
Pour Python 2 :
Sous Windows pour Python 2, il est crucial d'ouvrir les fichiers en mode binaire, en utilisant 'rb' ou 'wb', avant de les transmettre soit à csv.reader ou csv.writer. Bien que le fichier soit un fichier texte, CSV est considéré comme un format binaire par les bibliothèques impliquées, avec rn séparant les enregistrements. L'écriture de ce séparateur en mode texte invite le runtime Python à remplacer n par rn, ce qui entraîne les séquences rrn observées dans le fichier. Référez-vous à cette réponse précédente pour plus de détails sur cet aspect.
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!