Problème avec un code d'écriture dans un fichier

Le
Francois
Bonjour à tous,

Je suis sur Ubuntu et je débute vraiment en Python. J'ai un problème
avec ce code

######################################
from os import *

obFichier = open('MonFichier.txt','w')
obFichier.write('Salut tout le monde !!!')
obFichier.close()
print 'C'est fini merci !'
######################################

qui est censé créer le fichier MonFichier.txt (s'il n'existe pas déjà)
et écrire dessus. J'ai ce message d'erreur :

######################################
File "test.py", line 3, in <module>
obFichier = open('MonFichier.txt','a')
TypeError: an integer is required
######################################


1) Pourquoi ce code ne marche pas ?

2) Les fonctions open, write etc. font-elles bien partie du module os ?


Merci d'avance.


François
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Franssoa
Le #1581215
Bonjour à tous,

Je suis sur Ubuntu et je débute vraiment en Python. J'ai un problème
avec ce code

######################################
from os import *
obFichier = open('MonFichier.txt','w')
######################################
File "test.py", line 3, in <module>
obFichier = open('MonFichier.txt','a')
TypeError: an integer is required
######################################
1) Pourquoi ce code ne marche pas ?
2) Les fonctions open, write etc. font-elles bien partie du module os ?


Le os.open prend comme paramètre open( file, flags[, mode])
En faisant un "from os import * " tu écrase la fonction open native de
python qui ne prend pas le paramètre 'flag'

Donc, ici, ton "from os import *" est inutile, et d'une manière
générale, il vaut mieux écrire :

import os
obFichier = os.open("MonFichier.txt",777)

que
from os import *
obFichier = open("MonFichier.txt",0777,"w")

comme ça tu n'a pas le risque d'écraser (le nom) d'autres fonctions
existantes.
--
Franssoa

Boa Guy Serge
Le #1581214
On 14 mar, 14:14, Francois
Bonjour à tous,

Je suis sur Ubuntu et je débute vraiment en Python. J'ai un problème
avec ce code

######################################
from os import *

obFichier = open('MonFichier.txt','w')
obFichier.write('Salut tout le monde !!!')
obFichier.close()
print 'nC'est fini merci !n'
######################################

qui est censé créer le fichier MonFichier.txt (s'il n'existe pas déj à)
et écrire dessus. J'ai ce message d'erreur :

######################################
File "test.py", line 3, in <module>
obFichier = open('MonFichier.txt','a')
TypeError: an integer is required
######################################

1) Pourquoi ce code ne marche pas ?

2) Les fonctions open, write etc. font-elles bien partie du module os ?

Merci d'avance.

François


il faut importer Tkinter comme suit:
from Tkinter import *
obFichier = open('Monfichier', 'w')
obFichier.write('salut tout le monde !!!')
obFichier.close()
ok bonne journée bon codage






Francois
Le #1581213
Ok, merci beaucoup. Les choses sont claires.

open() fait déjà partie du noyau Python (pas besoin de faire appel à un
module) et le module os, que j'ai appelé de manière pas très prudente,
en a modifié la définition.

J'ai alors juste une petite question (moins importante). Si la fonction
open() fait directement partie du noyau Python, pourquoi ne fait-elle
pas partie des "mots clés" réservés au langage ? En tout cas à en croire
un livre que j'ai ("apprendre à programmer avec Python"), il y a 28
"mots clés" : and, assert ... Mais pas open ?

François
Guillaume
Le #1581212
Ok, merci beaucoup. Les choses sont claires.

open() fait déjà partie du noyau Python (pas besoin de faire appel à un
module) et le module os, que j'ai appelé de manière pas très prudente,
en a modifié la définition.

J'ai alors juste une petite question (moins importante). Si la fonction
open() fait directement partie du noyau Python, pourquoi ne fait-elle
pas partie des "mots clés" réservés au langage ? En tout cas à en croire
un livre que j'ai ("apprendre à programmer avec Python"), il y a 28
"mots clés" : and, assert ... Mais pas open ?

François


Une fonction ne peut pas être un mot-clé puisqu'il faut laisser la
possibilité d'encapsuler cette fonction, pour modifier son comportement
ou lui adjoindre de nouvelles fonctionnalités.

Cordialement,
--
Guillaume

Francois
Le #1581211
Une fonction ne peut pas être un mot-clé puisqu'il faut laisser la
possibilité d'encapsuler cette fonction, pour modifier son comportement
ou lui adjoindre de nouvelles fonctionnalités.


D'accord, merci.

Mais par exemple, print n'est pas une fonction ? En tout cas c'est un
mot clé.

Désolé pour cette question un peu bête. :-)


François

Eric Brunel
Le #1581210
On Fri, 14 Mar 2008 17:30:07 +0100, Francois
Une fonction ne peut pas être un mot-clé puisqu'il faut laisser la
possibilité d'encapsuler cette fonction, pour modifier son comportement
ou lui adjoindre de nouvelles fonctionnalités.


D'accord, merci.

Mais par exemple, print n'est pas une fonction ? En tout cas c'est un
mot clé.

Désolé pour cette question un peu bête. :-)


La question n'est pas bête du tout en fait: 'print' était effectivement un
mot-clef en Python 1.x et 2.x. Cela a été considéré comme un problème et
va être modifié en Python 3.0, dans lequel 'print' va devenir une
fonction, et ne sera donc plus un mot-clef.
--
python -c "print ''.join([chr(154 - ord(c)) for c in
'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"


Francois
Le #1581209
La question n'est pas bête du tout en fait: 'print' était effectivement
un mot-clef en Python 1.x et 2.x. Cela a été considéré comme un problème
et va être modifié en Python 3.0, dans lequel 'print' va devenir une
fonction, et ne sera donc plus un mot-clef.


OK, merci c'est très clair. Mais encore une fois, une réponse appelle
une autre question.

1) Comment fait-on pour connaître sa version de Python ?
2) Cela voudra donc dire que pour la version future version 3.0, il
faudra écrire print() au lieu de print (tout court). Si c'est le cas,
bonjour les problèmes de compatibilité avec les programmes tapés pour
les versions 1.x et 2.x ?

François

Avell Diroll
Le #1581208
Francois wrote:
(snip)
1) Comment fait-on pour connaître sa version de Python ?


python -V
(à la ligne de commande)

2) Cela voudra donc dire que pour la version future version 3.0, il
faudra écrire print() au lieu de print (tout court). Si c'est le cas,
bonjour les problèmes de compatibilité avec les programmes tapés pour
les versions 1.x et 2.x ?


C'est pour cela que les changements de version majeurs (indentation du
premier chiffre) désignent pour la plupart des logiciels des
modifications incompatibles avec les versions précédentes.
Pour information, les changements de version mineur (le second nombre)
désigne des améliorations du logiciels tout en restant compatibles, et
les changements ultra-mineur (le 3e nombre) signalent des corrections de
bugs. Ce ne sont pas des règles absolues, mais elle sont très suivies.

C'est pour cela que la série des python 2.x devrait continuer après la
sortie de python 3.0 (au moins jusqu'au 2.7 si je me souviens bien), et
que python 3.0 sera accompagné d'outils de traduction automatique de
code 2.X vers code 3.X.

Bonne continuation

Ju
--
Getting the job done is no excuse for not following the rules.

Corollary:
Following the rules will not get the job done.

Mihamina Rakotomandimby
Le #1581207
Ce ne sont pas des règles absolues, mais elle sont très suivies.


Je voulais juste appuyer ce point: ce n'est suivi que par certains.
Par (contre) exemple, chez Ubuntu, Gentoo,... et les milliers de
"petits" logiciels (genre xcdroast) qui font expres de rester en
0.99xxx ;-)

--
Huile Essentielle de Camphre http://www.huile-camphre.fr
Infogerance http://www.infogerance.us
(Serveurs, Postes de travail, Développement logiciel)

Francois
Le #1582798
1) Comment fait-on pour connaître sa version de Python ?


python -V
(à la ligne de commande)


Oops, en ligne de commande du terminal bien sûr. J'avais testé sur
l'interpréteur de commandes Python que je suis bête.


2) Cela voudra donc dire que pour la version future version 3.0, il
faudra écrire print() au lieu de print (tout court). Si c'est le cas,
bonjour les problèmes de compatibilité avec les programmes tapés pour
les versions 1.x et 2.x ?


C'est pour cela que les changements de version majeurs (indentation du
premier chiffre) désignent pour la plupart des logiciels des
modifications incompatibles avec les versions précédentes ...


Merci beaucoup !
J'ai appris quelque chose. Dire que ce genre de chiffres, je les voyais
un peu partout sans jamais savoir qu'il y avait une logique là-dessous.
Logique pas systématiquement respectée si j'ai bien compris.

J'ai l'impression que c'est toujours un peu antagoniste de faire évoluer
un langage d'un côté et de conserver la compatibilité de l'autre.


Merci beaucoup


François


Publicité
Poster une réponse
Anonyme