Python, ouverture de fichier

Résolu/Fermé
Utilisateur anonyme - 10 sept. 2011 à 14:37
 Utilisateur anonyme - 15 avril 2012 à 12:33
Bonjour,

Lorsque j'essaie d'ouvrir un fichier (les lignes de codes seront plus parlantes) :

>>import os     
>>os.chdir('C:\\Documents and Settings\Moi\Bureau')     
>>fichier = os.open('fichier','a')     

Traceback (most recent call last):     
  File "<pyshell#7>", line 1, in <module>     
    fichier = os.open('fichier','a')     
TypeError: an integer is required


Je suppose qu'il faut mettre un chiffre à la place du 'a' mais lequel ?

Merci d'avance...

PS : python 2.7
A voir également:

4 réponses

Utilisateur anonyme
13 avril 2012 à 18:22
J'ai enfin trouvé la réponse...

Non, il ne fallait pas importer le module os mais tout simplement faire open(fich,a) pour l'ouvrir, sans importer la librairie os !!!
1
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 130
14 avril 2012 à 18:05
C'est ce que j'écrivais à la fin de mon message du 10 septembre 2011

Par ailleurs, je n'ai pas pensé à indiquer que quand on a une fonction telle que os.open(file,flags[, mode]) et qu'on veut passer une valeur à mode, sans en passer une à flags, il faut faire l'appel de la fonction en écrivant None en deuxième position:
os.open(mon_fichier, None,os.O_APPEND)



NB: dans ta devise, il ne doit pas y avoir de "s" dans "ton amis"
0
Utilisateur anonyme
15 avril 2012 à 12:33
Je ne l'avais pas compris comme ça. Je suivais Apprendre à programmer avec Python de G.Swinnen et juste avant l'introduction à l'ouverture des fichiers, il parle de l'importation du module os, ce qui a prêté à confusion.

NB : oups, merci (un peu dans la lune quand je l'ai écrite surtout que je l'avais écrite bien juste avant...)
0
Bonjour

Je n'y connais pas grand chose en Python, mais je suis étonné de ton os.open.
D'après la doc de la V2.7, le module os n'a pas de fonction open.
open est une fonction interne du langage, il suffirait d'écrire fichier = open('fichier','a')
http://docs.python.org/library/functions.html#open
0
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 130
Modifié par heyquem le 10/09/2011 à 16:59
Si, si. Les fonctions open() , ça ne manque pas dans Python:


open() (built-in function)  
(FrameWork.DialogWindow method)  
(FrameWork.Window method)  
(distutils.text_file.TextFile method)  
(imaplib.IMAP4 method)  
(in module aifc)  
(in module anydbm)  
(in module cd)  
(in module codecs)  
(in module dbhash)  
(in module dbm)  
(in module dl)  
(in module dumbdbm)  
(in module gdbm)  
(in module gzip)  
(in module io)  
(in module os) 
(in module ossaudiodev)  
(in module posixfile)  
(in module shelve)  
(in module sunau)  
(in module sunaudiodev)  
(in module tarfile)  
(in module wave)  
(in module webbrowser)  
(pipes.Template method)  
(tarfile.TarFile method)  
(telnetlib.Telnet method)  
(urllib.URLopener method)  
(urllib2.OpenerDirector method)  
(webbrowser.controller method)  
(zipfile.ZipFile method)
0
Je n'avais pas dit qu'elle n'existait ps du tout, j'avais dit qu'elle n'existait pas dans le module os, et qu'il y en avait une interne au langage.
Mais c'est clair que j'avais tort, j'avais mal regardé. Mes excuses à internetgg pour l'avoir mal renseigné.
0
Utilisateur anonyme
10 sept. 2011 à 18:40
Pas de problème ;-)
0
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 130
Modifié par heyquem le 10/09/2011 à 16:56
Bonjour


La signature de os.open est os.open(file, flags[, mode]) c'est à dire que si la fonction reçoit deux objets comme arguments, ils sont assignés aux paramètres file et flags
La valeur passée en second ne concerne donc pas le mode mais les flags. En fait, d'après ce que je comprends, les modes par ailleurs définis avec 'r' ou 'w' ou 'a' sont définis dans os.open() par des valeurs passées à la fois aux paramètres flags et mode.


Pour la liste des valeurs que peut prendre flags , voir
https://docs.python.org/3/library/os.html#open-constants
Ce sont
os.O_RDONLY     
os.O_WRONLY     
os.O_RDWR     
os.O_APPEND     
os.O_CREAT     
os.O_EXCL     
os.O_TRUNC     
etc
Ce sont des entiers

Le paramètre mode ne doit recevoir une valeur que si os.O_CREAT est parmi les valeurs passées à flags.
Ce paramètre reçoit aussi uniquement un entier.

Pour plus de détails:
https://www.microsoft.com/en-us/download/details.aspx?id=55984




Mais pour tes besoins, je pense que la fonction built-in (c'est à dire qu'il n'y a pas besoin de charger un module pour en disposer) open() devrait être suffisante car je ne crois pas que tu veuilles faire un programme avec Python pour des opérations du bas-niveau:

os.open(file,flags[, mode])
This function is intended for low-level I/O. For normal usage, use the built-in function open(), which returns a "file object" with read() and write() methods (and many more).
https://docs.python.org/3/library/os.html#os.open


Comme tu utilises Python 2.7, je te conseille aussi d'utiliser le statement with :

with open(filename,'wb') as :     
     content = f.read()
0
Utilisateur anonyme
10 sept. 2011 à 18:22
Merci pour ta reponse... Quand j'essaie la méthode avec 'with ...' il me marque invalide syntaxe ...
0
en indiquant une valeur à un flag, j'arrive enfin à ouvrir le fichier mais je n'arrive pas à écrire dedans (même avec O_RDWR)
0
mousekey Messages postés 68 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 22 novembre 2014 4
Modifié par baladur13 le 13/04/2012 à 22:25
0
Utilisateur anonyme
13 avril 2012 à 20:44
pourquoi faire simple alors qu'on peut faire compliquer ?
0