web-dev-qa-db-fra.com

Python csv writer utilise-t-il toujours des caractères de fin de ligne DOS?

Je me rends compte que la bibliothèque csv dans Python génère toujours des caractères de fin de ligne DOS. Même si j'utilise le 'wb' mode, même si j'utilise Linux.

import csv

f = open('output.txt', 'wb');
writer = csv.writer(f)
writer.writerow([2,3,4]);
f.close()

Le code ci-dessus utilise toujours '\r\n' comme séparateur de fin de ligne. Comment puis-je le faire utiliser use '\n' seulement?

38
Vendetta

Vous pouvez donner à votre instance writer un argument --- lineterminator personnalisé dans le constructeur:

writer = csv.writer(f, lineterminator="\n")
68
Niklas B.

Comme Niklas a répond , le argument lineterminator vous permet de choisir vos fins de ligne. Plutôt que de le coder en dur sur '\n', rendez-la indépendante de la plateforme en utilisant séparateur de ligne : os.linesep. Assurez-vous également de spécifier newline='' pour Python 3 (voir this commentaire).

import csv
import os

with open('output.csv', 'w', newline='') as f:
    writer = csv.writer(f, lineterminator=os.linesep)
    writer.writerow([2, 3, 4])

Ancienne solution (Python 2 uniquement)

Dans Python 2, utilisez 'wb' mode (voir le docs ).

import csv
import os

with open('output.csv', 'wb') as f:
    writer = csv.writer(f, lineterminator=os.linesep)
    writer.writerow([2, 3, 4])

Pour ceux qui trouvent ce message, ne manquez pas le 'wb' si vous utilisez toujours Python 2. (Dans Python 3, ce problème est géré par Python). Vous ne remarquerez pas de problème si il vous manque sur certaines plateformes comme GNU/Linux, mais il est important d'ouvrir le fichier en mode binaire sur les plateformes où cela compte, comme Windows. Sinon, le fichier csv peut se retrouver avec une ligne terminaisons comme \r\r\n. Si vous utilisez le 'wb' et os.linesep, vos fins de ligne doivent être correctes sur toutes les plateformes.

26
Don Kirkby