3 votes

Formatage des cellules csv en texte avec python

Je donne une ligne de données à écrire dans un fichier csv. Il s'agit principalement de nombres de type flottant. Mais lorsqu'elles sont écrites dans le fichier csv, les cellules sont par défaut dans un format personnalisé. Ainsi, si j'ai un nombre en entrée comme 3,25, il s'imprime comme "Mar 25". Comment puis-je éviter cela ?
C'est le morceau de code :

data = [0.21, 3.25, 25.9, 5.2]  
f = open('Boot.csv','w')  
out = csv.writer(f, delimiter=';', quoting=csv.QUOTE_NONE)  
out.writerow(data)

5voto

Jon Clements Points 51556

El csv écrit bien les données - je suppose que vous l'ouvrez dans Excel pour consulter les résultats et qu'Excel décide de l'autoformater en date.

C'est un problème d'Excel, vous devez lui dire de ne pas jouer avec ce champ en le changeant en texte (ou en quelque chose qui n'est pas Général).

Si vous écrivez des données Excel, vous pouvez vous intéresser à l'option xlwt (consultez le site très utile http://www.python-excel.org/ ) - alors vos types de valeurs ne seront pas aussi susceptibles de fluctuer.

3voto

Verma Points 556

Il ne s'agit pas d'un problème, mais d'une tentative d'aide de la part de MS Excel. Si vous avez l'intention de traiter par programme le fichier csv de sortie, vous n'aurez aucun problème.

Si vous devez traiter/visualiser les données dans Excel, vous pouvez vouloir citer toutes les données (en utilisant csv.QUOTE_ALL plutôt que csv.QUOTE_NONE, auquel cas Excel devrait tout traiter comme du texte et ne pas essayer d'être "utile".

1voto

Eric Points 36290

Cela ne fait pas partie de csv . csv n'est rien d'autre que des valeurs séparées par des virgules. Si vous ouvrez le fichier dans le bloc-notes, il sera conforme à vos attentes.

Lorsque vous l'ouvrez dans Excel, il devine ce que chaque valeur représente, puisque cette information n'est pas et ne peut pas être encodée dans le fichier CSV. Pour une raison quelconque, Excel décide 3.25 représente une date, pas un nombre.

0voto

ecatmur Points 64173

Essayez d'utiliser un format qui ne peut pas être interprété à tort comme une date :

out.writerow(['%.12f' % item for item in data])

Il comprendra les zéros de fin de ligne et sera donc toujours interprété par Excel comme un nombre.

0voto

jdotjdot Points 4430

Ce n'est pas un problème avec le code que vous avez écrit ; c'est avec Excel (que vous utilisez probablement pour ouvrir le CSV) - il interprète 3.25 comme March 25 . Vous pouvez résoudre ce problème en sélectionnant les cellules concernées, en cliquant avec le bouton droit de la souris et en cliquant sur "Formater les cellules", puis dans l'onglet "Nombre", en sélectionnant "Nombre" comme catégorie et en vous assurant que le nombre de décimales affiché est correct.

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