Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Comment créer, editer et supprimer des fichiers en Python ?
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Comment créer, editer et supprimer des fichiers en Python ?

Posté le 08/01/2019 09:24

Bonjour à tous!

Avec le nouvel OS de la Graph 90, il y a désormais un module Python. Ayant récemment découvert les dictionnaires, je me lance dans le folle idée de faire un dico Français-Anglais, mais c'est sans compter l'absence de sauvegarde... Je me renseigne et trouve une instruction open qui permet d'ouvrir voire de créer un fichier selon le mode d'ouverture. Il se trouve que cette commande existe aussi sur le port MicroPython 1.9.4... Je l'essaye, elle ne signale aucune erreur lorsque je lui demande d'ouvrir un fichier texte :
file=open('\\fls0\TEST/txt','a')
Le mode d'ouverture a permet de créer le fichier si il est inexistant (ce n'est pas le cas) en théorie, ma variable file aurait dû contenir un truc or elle ne contient rien... (quand je fait print(file) j'obtiens none)
Si quelqu'un connait la syntaxe correcte de la commande open je suis preneur ! Merci d'avance



1, 2 Suivante
Kikoodx Hors ligne Ancien labélisateur Points: 3039 Défis: 11 Message

Citer : Posté le 08/01/2019 10:47 | #


Tu ne peux pas lire un fichier en mode écriture, tu as trois modes d'ouverture en Python :

w : Ouvre le fichier en écriture (le crée si n'existe pas) et efface son contenu.
a : Ouvre le fichier en écriture (le crée si n'existe pas) et d'efface PAS son contenu. Les commandes d'écriture rajoutent le contenu à la fin du fichier.
r : Ouvre le fichier en lecture.

Ensuite, utiliser les commandes correspondantes, ici ouvrir le fichier pré-créé texte et placer son contenu dans copie.

with file as open("texte","r"): //file n'existera que dans le bloc
  contenu = file.read()

with file as open("copie","w"): //Idem.
  file.write(contenu)


N'oublie pas de mettre des chemins corrects
ouais ouais
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 08/01/2019 11:18 | #


Merci ! mais ça ne marche pas...
Je met les chemins à la place de texte ?
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Cakeisalie5 Hors ligne Ancien administrateur Points: 1964 Défis: 11 Message

Citer : Posté le 08/01/2019 11:19 | #


Le mode a signifie en réalité append, ce qui veut dire que tu ouvres le fichier et que tu places le curseur pour écrire à la fin. C'est utile pour les fichiers de logs par exemple.

Si tu veux pouvoir lire et écrire dans un fichier, les modes suivants sont à ta disposition :

- r+ : si le fichier n'existe pas, la création du curseur échoue.
- w+ : si le fichier n'existe pas, il est créé, et s'il existe, le contenu sera vidé avant que tu ne puisses interagir avec.
- a+ : si le fichier n'existe pas, il est créé. Le curseur sera placé à la fin du fichier, il te faudra donc le remettre au début si tu veux commencer à lire du début.

Je t'encourage à lire ceci (en anglais) pour approfondir ta connaissance des différents modes d'ouverture.
Respirateur d'air, BDFL de Cahute, des utilitaires de communication pour calculatrices CASIO.


Mon blogMes autres projets
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 08/01/2019 11:22 | #


J'ai ça comme erreur : SyntaxeError : can't assign to expression au niveau du with
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Kikoodx Hors ligne Ancien labélisateur Points: 3039 Défis: 11 Message

Citer : Posté le 08/01/2019 11:56 | #


Les .+ sont disponibles en MicroPython ?
Sinon, si la Syntaxe Error s'affiche toujours avec les expressions classiques essaie de créer l'objet comme dans ton premier post, et oui il faut mettre le chemin du fichier à la place de texte et copie
(NB: le code échouera peut être si texte n'existe pas)
ouais ouais
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 08/01/2019 17:26 | #


>_<' récapitulons : j'ai un fichier qui s'appelle texte et qui est ici \\fls0\texte il contient une phrase.
Lorsque j'utilise le with j'ai la syntaxe error relevée à mon dernier post et lorsque je que fait ça avec le = l'ouverture ne présente aucun problème mais impossible d'utiliser .write ou .read parce que le type de ma variable n'est pas correct (dans l'exemple ci-dessous, file)

file=open("\\fls0\texte","r")
contenu=file.read()
Cette deuxième ligne me retourne l'erreur : AttributeError : 'NoneType' object has no attribute 'read' ...

Merci d'avance
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Kikoodx Hors ligne Ancien labélisateur Points: 3039 Défis: 11 Message

Citer : Posté le 08/01/2019 17:37 | #


Hum... Essaie remplacer le nom d'objet file par fichier ou f.
Sinon je ne sais pas, la doc que j'ai trouvé dit que ça devrait fonctionner.

http://docs.micropython.org/en/v1.8.2/esp8266/esp8266/tutorial/filesystem.html
ouais ouais
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 08/01/2019 18:03 | #


Ça veut dire que ton fichier est nul (None).

- Commence déjà par escaper les backslashs : là tu mets une tabulation dans le nom de fichier

- Tu es sûr que la commande file est implémentée dans le port de la g90 ?
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 08/01/2019 19:01 | #


Merci pour la doc ! Elle concerne cependant MicroPython 1.8, devenu obsolète : je suis actuellement avec la version 1.9.4... Mais je pense que ça doit marcher
A la place des backslashs je met quoi du coup ? Des slashs ?
filen'est pas une commande mais un objet

"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Breizh_craft En ligne Modérateur Points: 1171 Défis: 7 Message

Citer : Posté le 08/01/2019 19:10 | #


Nan, échapper c'est ajouter des backslash devant : \\\\fls0\\test.txt
Breizh.pm – Un adminsys qui aime les galettes.
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 08/01/2019 19:11 | #


Ah okay merci !!
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Kikoodx Hors ligne Ancien labélisateur Points: 3039 Défis: 11 Message

Citer : Posté le 08/01/2019 19:24 | #


Mince je n'avais pas tilté !
Tant mieux alors, quelqu'un pourrait tester si les slashs fonctionnent également ?
Et si tu déclares les fichiers à l'extérieur de with, peut être faudrait-il présenter file.close()
ouais ouais
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 08/01/2019 19:29 | #


f=open("\\\\fls0\\MICROPY.G1A", "w+")
f.close()

Effet immédiat.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 08/01/2019 19:36 | #


Permettez-moi de vous présenter un truc utile :

f=open(r"\\fls0\MICROPY.G1A", "w+")
f.close()

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 08/01/2019 19:48 | #


Et du coup c'est quoi le bout de code qui fonctionne.. moi aussi j'ai essayé mais je n'y parvient pas..
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 08/01/2019 19:55 | #


Je ne sais pas... Rien ne fonctionne : toujours des erreurs... faut que je réessaye avec la doc sous le nez... mais sans conviction...
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Critor En ligne Administrateur Points: 2687 Défis: 18 Message

Citer : Posté le 08/01/2019 19:58 | #


Possible aussi que Casio n'ait pas connecté ça...

En tous cas le open() est à date présent sur toutes les implémentations Python sur calculatrice :
https://tiplanet.org/forum/viewtopic.php?t=21991&p=237972

Mais effectivement, à ce jour, je n'ai pas entendu parler sur calculatrice de script Python capable de charger ou enregistrer des données dans un fichier.
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 08/01/2019 20:02 | #


Critor a écrit :
En tous cas le open() est à date présent sur toutes les implémentations Python sur calculatrice

Pour info, je n'ai jamais réussi à ouvrir un fichier avec la Graph 90+E. À chaque fois, j'ai une Syntax error, quelque soit les arguments fournis à la fonction…
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 08/01/2019 20:18 | #


L'est pas impossible que Zezombye arrive à implémenter ça, je suppose ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 08/01/2019 20:23 | #


Si il trouve les sources de l'addin de Casio, trouve le bug, trouve comment le corriger, trouve comment recompiler le tout, ouais, c'est pas impossible
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
1, 2 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 218 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd