94 votes

Pourquoi le fichier CSV contient-il une ligne vide entre chaque ligne de données lors de la sortie avec Dictwriter en Python

J'utilise DictWriter pour exporter les données d'un dictionnaire dans un fichier csv. Pourquoi le fichier CSV a-t-il une ligne vide entre chaque ligne de données ? Ce n'est pas une grosse affaire, mais mon ensemble de données est volumineux et ne tient pas dans un seul fichier csv car il contient trop de lignes car le "double espacement" double le nombre de lignes dans le fichier.

Mon code pour écrire dans le dictionnaire est :

 headers=['id', 'year', 'activity', 'lineitem', 'datum']
output = csv.DictWriter(open('file3.csv','w'), delimiter=',', fieldnames=headers)
output.writerow(dict((fn,fn) for fn in headers))
for row in rows:
    output.writerow(row)

132voto

FatBusinessman Points 1142

Par défaut, les classes du csv utilisent des terminaisons de ligne de style Windows ( \r\n ) plutôt que de style Unix ( \n ). Cela pourrait-il être la cause des doubles sauts de ligne apparents?

Si c'est le cas, vous pouvez le remplacer dans le constructeur DictWriter :

 output = csv.DictWriter(open('file3.csv','w'), delimiter=',', lineterminator='\n', fieldnames=headers)

10voto

James Nicholson Points 83

Changer le 'w' (écrire) dans cette ligne :

 output = csv.DictWriter(open('file3.csv','w'), delimiter=',', fieldnames=headers)

To 'wb' (écrire en binaire) a résolu ce problème pour moi :

 output = csv.DictWriter(open('file3.csv','wb'), delimiter=',', fieldnames=headers)

Python v2.75 : Ouvrir()

Crédit à @dandrejvv pour la solution dans le commentaire sur le message original ci-dessus.

0voto

tito Points 5350

Je viens de tester votre extrait, et il n'y a pas de ligne à double interligne ici. Les fins de ligne sont \r\n , donc ce que je vérifierais dans votre cas est :

  1. votre éditeur lit correctement le fichier DOS
  2. aucun \n n'existe dans les valeurs de vos lignes dict.

(Notez que même en mettant une valeur avec \n, DictWriter cite automatiquement la valeur.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X