IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Premier script à critiquer


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 037
    Par défaut Premier script à critiquer
    Bonjour

    Voici mon premier script de grand débutant
    Merci par avance pour toute critique sur les méthodes utilisées, la syntaxe, gestion des erreurs et tout ce qui est à bien faire en Python...

    Ce script crée une copie d'un fichier en supprimant toutes les lignes qui commencent par une certaines chaine.
    Si jamais une chaine interdite est détectée il stoppe tout

    Si jamais la première étape se passe bien il lance une application avec paramètres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import os # On importe le module os
    from tkinter.messagebox import * # import de quoi mettre des message d'alerte
    from tkinter import * # import de Tkinter
     
    root = Tk()
    root.withdraw() # destruction de la fenetre principale tkinter par defaut (pour avoir que les message Box visibles)
     
    print("Creation fichier -> Sans.srec")
     
    message = "OK !!"       # init du message
    erreur = False          #init de l'erreur
    with open("Avec.srec", "r") as fread: # ouvre en lecture le fichier et le lit, pas besoin de close ainsi
            with open("Sans.srec", "w") as fwrite: # ouvre en ecriture un fichier, pas besoin de close ainsi
                    for line in fread:
                            # Copie de la partie du fichier 
                            if not line.startswith("S3152") : #test debut de chaine
                                    fwrite.write(line)      
     
    			# Test chaine interdite
                            if line.startswith("S3150000") :
                                    message = "Atention ! Mauvais fichier"
                                    fwrite.write(message)
                                    showerror("Titre", message)
                                    erreur = True
                                    break
     
    print("->" + message)
     
    if erreur == False :
            print("Creation du binaire")	
            os.system('arm-none-eabi-objcopy -I srec -O binary Sans.srec sortie.bin')
            print("-> OK !!")
     
    print("Fin du script.")
     
     
    #os.system("pause") # pause du script pour ne pas fermer la console en debug

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    il y aurait sans doute beaucoup à dire sur le style etc. mais si on part du principe que c'est juste un code "one-shot" fait à la va-vite pour être fonctionnel ma foi y'a trop rien à redire; ça fait le job et à priori on lui demande pas grand chose de plus (comme d'être une vraie appli pro typiquement).

    les deux with open cascadés peuvent tenir sur une même ligne with open("Avec.srec", "r") as fread, open("Sans.srec", "w") as fwrite:, par ailleurs le choix de fread et fwrite est pas forcément très habile, heureusement que tu as pas un from modulexyz import *, c'est aussi la raison pour laquelle à titre perso quand j'importe tout je préfère encore importer directement le module, ça pollue moins l'espace de noms et on est sûr de pas se marcher dessus entre la variable fread et la fonction modulexyz.fread(), avis perso...

    le if erreur == False peut se décliner en if not erreur, c'est du détail

    edit: et je vois juste maintenant le tag [Python 3x] dans l'intitulé, du coup pas besoin de préciser l'encodage, en Py3 c'est utf-8 par défaut, en revanche sur la plupart des distributions Linux il me semble que c'est encore la version 2 de Python par défaut, donc on précisera #!/usr/bin/env python3 explicitement

  3. #3
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 037
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    il y aurait sans doute beaucoup à dire sur le style etc. mais si on part du principe que c'est juste un code "one-shot" fait à la va-vite pour être fonctionnel ma foi y'a trop rien à redire; ça fait le job et à priori on lui demande pas grand chose de plus (comme d'être une vraie appli pro typiquement).
    C'est un petit script mais ce n'est pas du one-shot, il me servira de longues années et en plus je m'en sers pour apprendre et si possible à bien faire !

    Citation Envoyé par BufferBob Voir le message
    par ailleurs le choix de fread et fwrite est pas forcément très habile, heureusement que tu as pas un from modulexyz import *,
    J'ai cherché Fread dans la doc de modulexyz et je n'ai pas trouvé de quoi il s'agit j'utilise un mot clé réservé avec fread et fwrite ?


    Citation Envoyé par BufferBob Voir le message
    c'est aussi la raison pour laquelle à titre perso quand j'importe tout je préfère encore importer directement le module, ça pollue moins l'espace de noms et on est sûr de pas se marcher dessus entre la variable fread et la fonction modulexyz.fread(), avis perso...
    là j'ai rien compris
    j'ai tenté de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from tkinter.messagebox import * # import de quoi mettre des messages d'alerte
    from tkinter import * # import de Tkinter
    par
    mais il ne me trouve plus Tk()


    Citation Envoyé par BufferBob Voir le message
    je vois juste maintenant le tag [Python 3x] dans l'intitulé, du coup pas besoin de préciser l'encodage, en Py3 c'est utf-8 par défaut, en revanche sur la plupart des distributions Linux il me semble que c'est encore la version 2 de Python par défaut, donc on précisera #!/usr/bin/env python3 explicitement
    modif python 3 ok
    Mais là il me vient une question liée à ça :
    J'ai testé Visual Studio Code qui m'a invité à installer Pylint mais l'installation a échoué parc qu'il n'arrivait pas à lire le fichier
    C:\Program Files (x86)\Python36-32\Lib\site-packages\pip\compat\__init__.py
    parce qu'il essayait de le lire en UTF8 alors que le fichier etait en ANSI
    j'ai du ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # -*- coding: iso-8859-1 -*-
    dans le dit fichier pour que l'installation fonctionne !
    Il est où le soucis ? leur fichier d’installation mal fichu ? ma configuration bancale ?
    du coup je suis assez tenté de laisser le # -*- coding: utf-8 -*- dans mes fichiers, ne serait ce que pour penser au format !

    Merci

  4. #4
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par petitours Voir le message
    il me servira de longues années
    du coup t'auras l'occasion de l'améliorer au fur et à mesure de ton apprentissage de Python, c'est d'ailleurs souvent comme ça que ça se passe

    J'ai cherché Fread dans la doc de modulexyz et je n'ai pas trouvé de quoi il s'agit j'utilise un mot clé réservé avec fread et fwrite ?
    j'ai mis modulexyz comme j'aurai pu mettre moduletoto, c'est un module fictif, dans de nombreux langages fread et fwrite sont des fonctions, donc pour peu qu'on connaisse d'autres langages de prog ça peut être confusant, et si le développeur du module toto a la bonne idée d'appeller ses fonctions fread et fwrite, vu qu'on a des variables qui ont le même nom on se prend les pieds dans le tapis

    j'ai tenté de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from tkinter.messagebox import * # import de quoi mettre des messages d'alerte
    from tkinter import * # import de Tkinter
    par
    mais il ne me trouve plus Tk()
    avec un peu de chance il trouvera tkinter.Tk(), après c'était une remarque de l'ordre du détail (surtout quand on débute à mon avis), t'auras probablement l'occasion de te familiariser avec le principe, question d'habitude

    modif python 3 ok Mais (...) J'ai testé Visual Studio Code qui (...) a échoué (...) j'ai du ajouter # -*- coding: iso-8859-1 -*-
    Il est où le soucis ? leur fichier d’installation mal fichu ? ma configuration bancale ?
    aucune idée, c'est un cas assez spécifique et globalement sous Windows c'est bardé de cas wtfparticuliers, si ça marche en laissant tant mieux (d'autres auront peut-être une réponse plus formelle à ce sujet)

    et si c'est sous Windows, il est probable que le shebang ne serve simplement à rien, l'OS ne l’honore pas et se base uniquement sur l'extension .py, à voir dans certains IDE si c'est pris en charge...

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Quand on débute on peut coder un peu comme on veut, l'important est plutôt dans tout ce qu'on aura appris pour faire tomber le code en marche... Si vous voulez apprendre à mieux écrire vos codes, il y a des tas d'exemples dans les tutos, vous pouvez même lire le source de Python ou des bibliothèques que vous utilisez.

    Néanmoins, il y a quand même quelque chose de bancale (côté fonctionnel) dans votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if erreur == False :
            print("Creation du binaire")	
            os.system('arm-none-eabi-objcopy -I srec -O binary Sans.srec sortie.bin')
            print("-> OK !!")
    Le statut de retour d'os.system n'est pas testé.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [AJAX] Mon premier script PHP/MYSQL/AJAX
    Par NiC1305 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/04/2008, 18h51
  2. Shell - premier script : besoin de conseils
    Par Invité dans le forum Linux
    Réponses: 1
    Dernier message: 28/10/2007, 20h42
  3. [Débutant] ::. Premier script
    Par cyrill.gremaud dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 01/06/2006, 15h40
  4. Premier Script
    Par spiderman69 dans le forum Langage
    Réponses: 1
    Dernier message: 26/09/2005, 18h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo