159 votes

ValueError : Opération E/S sur fichier fermé

```html

import csv    

with open('v.csv', 'w') as csvfile:
    cwriter = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)

for w, c in p.items():
    cwriter.writerow(w + c)

Ici, p est un dictionnaire, w et c sont tous les deux des chaînes de caractères.

Lorsque j'essaie d'écrire dans le fichier, cela renvoie l'erreur :

ValueError: I/O operation on closed file.

```

223voto

falsetru Points 109148

Indentez correctement; votre instruction for doit être à l'intérieur du bloc with:

import csv    

with open('v.csv', 'w') as csvfile:
    cwriter = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)

    for w, c in p.items():
        cwriter.writerow(w + c)

En dehors du bloc with, le fichier est fermé.

>>> with open('/tmp/1', 'w') as f:
...     print(f.closed)
... 
False
>>> print(f.closed)
True

10voto

Slake Points 359

Même erreur peut être générée en mélangeant : des tabulations + des espaces.

with open('/foo', 'w') as f:
 (espaces OU tab) print f       <-- succès
 (espaces ET tab) print f       <-- échec

1voto

May Points 21

J'ai également le même problème. Voici mon code précédent

csvUsers = open('/content/gdrive/MyDrive/Ada/Users.csv', 'a', newline='', encoding='utf8')
usersWriter = csv.writer(csvUsers)
for t in users:
    NodeWriter=.writerow(users)
csvUsers.close() 

Apparemment, je devrais écrire usersWriter à la place de NodeWriter.

NodeWriter=.writerow(users)
usersWriter=.writerow(users)

Voici mon code actuel et il fonctionne

csvUsers = open('/content/gdrive/MyDrive/Ada/Users.csv', 'a', newline='', encoding='utf8')
usersWriter = csv.writer(csvUsers)
for t in users:
    usersWriter=.writerow(users)
csvUsers.close()

0voto

Yi Rong Wu Points 9
fichier = open("filename.txt", newline='')
pour ligne in self.data:
    print(ligne)

Sauvegarder les données dans une variable (fichier), donc vous avez besoin d'un with.

0voto

Luca Urbinati Points 11

J'avais ce problème lorsque j'utilisais une variable non définie à l'intérieur du with open(...) as f:. J'ai supprimé (ou défini à l'extérieur) la variable non définie et le problème a disparu.

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