8 votes

Python - le fichier csv est vide après avoir utilisé le rédacteur csv

Je suis un novice en Python. J'essayais de résoudre un problème d'écriture d'un fichier csv dans un programme plus important et j'ai décidé de revenir aux bases pour essayer de trouver le problème.

J'ai exécuté un exemple de code exact de la documentation sur la lecture et l'écriture de csv en Python :

import csv     
spamWriter = csv.writer(open('eggs.csv', 'w'), delimiter=' ', quotechar='|')    
spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

Lorsque je vais dans mon répertoire de travail et que je clique sur "eggs.csv", le fichier est vide et signalé comme étant de "0 kb". La même chose se produisait dans mon plus gros programme (fichiers csv vides). Est-ce que je rate quelque chose de complètement évident ?

Merci !

EDITAR :
Je viens d'essayer de modifier le code pour :

import csv
csvOut=open("eggs.csv", "wb")
spamWriter = csv.writer(csvOut, delimiter=' ', quotechar='|')
spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
csvOut.close()

Et ça a marché. Je ne sais pas pourquoi la première ne fonctionne pas pour moi.

14voto

inspectorG4dget Points 25092

Je ne suis pas trop familier avec le csv mais cela ressemble plus à un problème d'entrée/sortie de fichier qu'à un problème d'entrée/sortie de données. csv problème.

La raison pour laquelle vous ne voyez rien dans le fichier est que python a toujours le fichier ouvert. Vous devez le fermer.

Donc plutôt que de faire ça :

spamWriter = csv.writer(open('eggs.csv', 'w'), delimiter=' ', quotechar='|')

Faites plutôt ça :

f = open('eggs.csv', 'w')
spamWriter = csv.writer(f, delimiter=' ', quotechar='|')
# the rest of your code
f.close()

Maintenant vous devriez voir ce que vous voulez dans eggs.csv

J'espère que cela vous aidera

3voto

mtutlwalsh Points 31

J'arrive un peu tard dans la soirée, mais une solution que je n'ai pas encore vue en dehors d'un seul commentaire est d'utiliser with y as . Dans ce cas, cela peut ressembler à :

import csv     
with csv.writer(open('eggs.csv', 'w'), delimiter=' ', quotechar='|') as spamWriter:   
    spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

Je l'ai utilisé dans le passé sans aucun problème.

0voto

katrielalex Points 40655

Ce code fonctionne. Êtes-vous sûr que votre système d'exploitation n'arrondit pas simplement la taille du CSV à la baisse - après tout, il ne s'agit que de quelques octets !

Vous pouvez essayer print(open("eggs.csv").read()) pour voir si le fichier est effectivement vide, ou bien more eggs.csv à partir de la ligne de commande.

0voto

detly Points 11267

Le code que vous avez posté fonctionne parfaitement pour moi.

Êtes-vous sûr que le répertoire dans lequel vous exécutez ce script est bien le répertoire que vous vérifiez (supprimez-vous à chaque fois "eggs.gsv" avant de l'essayer) ?

0voto

Nigel Points 875

J'ai essayé cela dans l'interpréteur python. Dans le premier bout de code, je ne vois le contenu du csv qu'après avoir quitté python (lorsque le fichier est fermé). Il est certain que c'est lié à la fermeture du fichier.

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