web-dev-qa-db-fra.com

Python IOError: fichier non ouvert pour la lecture

Je reçois une erreur lorsque j'essaie d'ouvrir un fichier en Python. Voici mon code:

>>> import os.path
>>> os.path.isfile('/path/to/file/t1.txt')
>>> True
>>> myfile = open('/path/to/file/t1.txt','w')
>>> myfile
>>> <open file '/path/to/file/t1.txt', mode 'w' at 0xb77a7338>
>>> myfile.readlines()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: File not open for reading

J'ai aussi essayé:

for line in myfile:
    print(line)

et j'ai eu la même erreur. Quelqu'un sait-il pourquoi cette erreur se produit?

21
Alireza41

Vous avez ouvert le fichier pour l'écriture en spécifiant le mode comme 'w'; ouvrez le fichier pour la lecture à la place:

open(path, 'r')

'r' Est la valeur par défaut, il peut donc être omis. Si vous devez à la fois lire et écrire, utilisez le mode +:

open(path, 'w+')

w+ Ouvre le fichier pour l'écriture (le tronque à 0 octet) mais vous permet également de le lire. Si vous utilisez r+, Il est également ouvert pour la lecture et l'écriture, mais ne sera pas tronqué.

Si vous devez utiliser un mode double tel que r+ Ou w+, Vous devez vous familiariser avec la méthode .seek() aussi, comme l'utilisation des opérations de lecture et d'écriture déplacera la position actuelle dans le fichier et vous souhaiterez très probablement déplacer cette position actuelle du fichier explicitement entre de telles opérations.

Voir la documentation de la fonction open() pour plus de détails.

43
Martijn Pieters

Simple erreur si vous y réfléchissez. Dans votre code, vous faites:

myfile = open('/path/to/file/t1.txt','w')

Ce qui spécifie que c'est pour l'écriture, ce que vous devez faire est de le régler sur r qui est pour la lecture

myfile = open('/path/to/file/t1.txt','r')
1
Matt Seymour