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 :

nom de clé identique dans un cfg


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2013
    Messages : 29
    Par défaut nom de clé identique dans un cfg
    Bonsoir,
    Je vous explique mon problème j'ai un fichier txt de cette forme :

    [ABOUT]
    DATE = 19/11/2013
    [CONFIG]
    DUT_GCS_IP = 172.16.0.90
    DUT_GCS_PORT = 2001
    OSCILLO_IP = 172.16.0.91
    OSCILLO_PORT = 5025
    [TEST1]
    NOM_TEST = TEST7
    NO_TEST = 1
    CONFIG_DUT=cfg7
    VERIF_MATLAB = analyse_synchro1
    #----------------------------------------------
    NOM_TEST = TEST11
    NO_TEST = 2
    CONFIG_DUT=cfg11
    VERIF_MATLAB = analyse2
    #----------------------------------------------
    NOM_TEST = TEST7
    NO_TEST = 3
    CONFIG_DUT=cfg7
    VERIF_MATLAB = analyse_synchro1
    En utilisant configparser j'arrive bien a récupérer les valeurs des mes clés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import ConfigParser
    config = ConfigParser.ConfigParser()
    config.read('F:\\TESTS\\listeTests.cfg')
    NOM_TEST = config.get('TEST', 'NOM_TEST')
    CONFIG_DUT = config.get('TEST', 'CONFIG_DUT')
    NO_TEST = config.get('TEST', 'NO_TEST')
    VERIF_MATLAB = config.get('TEST', 'VERIF_MATLAB')
    Le problème est le suivant, je souhaiterais pouvoir faire une fonction permettant d'automatiser la lecture des 4 derniers paramètres du test car ce sont les seuls qui varient les autres sont globale.
    Seulement je ne souhaite pas modifier les noms des clés ni ajouter d'indice devant (car si on souhaite rajouter des tests au milieu il faudra décaler tous les chiffres :/)
    J'ai bien évidemment penser a faire une section différente par test mais c'est le même problème en cas de rajout de test au milieu ...
    J'aimerais savoir si il est possible de récuperer le contenu du cfg dans une liste qui serait NOM_TEST par exemple et qui serait de cette forme : ['TEST7', 'TEST11', 'TEST7']
    Bien sur la longeur de la liste peut varier

    Actuellement je ne peux recuperer que la dernière valeur en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NOM_TEST = config.get('TEST', 'NOM_TEST') #j'obtiens TEST7
    CONFIG_DUT = config.get('TEST', 'CONFIG_DUT') #j'obtiens cfg7
    NO_TEST = config.get('TEST', 'NO_TEST') #j'obtiens 3
    VERIF_MATLAB = config.get('TEST', 'VERIF_MATLAB')#j'obtiens analyse synchro_1
    Je doute que ce soit possible mais j'aimerais être sur avant de passer a une solution de lecture ligne par ligne qui sera bien plus gavante ^^
    Le module configparser m'allait bien jusque la

    Bien evidemment si vous voyez une autre solution que récupérer les clés portant le meme nom dans une liste je suis preneur aussi.
    Merci

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Salut,

    Je n'ai pas la réponse, mais une question! Est-ce un opérateur humain (toi, un collègue, madame michu...) qui édite ce fichier de configuration?

    Il existe de nombreux autres "formats" pour gérer des fichiers de données. Certains sont acceptés par d'autres languages (et meme en proviennent). Voici une liste non exhaustive:
    • YAML
    • XML
    • JSON
    • CSV
    • INI
    • ...

    Il n'y a pas un format qui domine, mais il faut plutôt se poser les bonnes questions dès le début: qui l'édite, qui peut le lire (multi language), est-ce édité souvent, rarement, est-ce qu'il doit être expressif, est-ce qu'il peut être gros (voir très gros)...

    Je t'aide pas trop là c'est vrai, mais si tu expose clairement les cas d'utilisations ici peut-être qu'une âme charitable t'aiguillera vers un format adapté!

    Ciao ciao


    Ju

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,
    Vous pourriez (par exemple) ecrire votre fichier CFG sous la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [TEST 1]
    NOM_TEST = TEST7
    CONFIG_DUT=cfg7
    VERIF_MATLAB = analyse_synchro1
    #----------------------------------------------
    [TEST 2]
    NOM_TEST = TEST11
    CONFIG_DUT=cfg11
    VERIF_MATLAB = analyse2
    #----------------------------------------------
    [TEST 3]
    NOM_TEST = TEST7
    CONFIG_DUT=cfg7
    VERIF_MATLAB = analyse_synchro1
    Vous récupérez ensuite la liste des "sections" via /parser.sections()/.
    Ca va retourner une liste de /str/ qui contiendra 'TEST 1', 'TEST 2', 'TEST 3' et d'autres noms.
    Il faudra "filtrer" ceux qui commencent par 'TEST' et parser l'entier (le NO_TEST que j'ai vire) puis lire la section 'TEST x' et ses options.

    Citation Envoyé par Julien N
    Il n'y a pas un format qui domine, mais il faut plutôt se poser les bonnes questions dès le début: qui l'édite, qui peut le lire (multi language), est-ce édité souvent, rarement, est-ce qu'il doit être expressif, est-ce qu'il peut être gros (voir très gros)..
    Tres juste mais ce genre de question doit être traitée avant de commencer a coder. A défaut on se pose des questions sur l’intérêt de ce qu'on a déjà réalise... ce qui peut être déstabilisant voire contre productif pour le débutant.

    Le professionnel lui va vous envoyer bouler car il s'en fout.
    Pour faire une analogie, est-il important cote "programme" que les textes soient encodes en latin-1 ou en utf-8 ou en...?
    Il suffit de tout traduire en Unicode avant de les utiliser dans votre programme et voila.

    Pour des suites de clés/valeurs on peut faire pareil et le choix du format n'a aucune importance cote "programmation" - on peut en changer facilement et donc laisser aux utilisateurs la possibilité de changer d'avis a l'usage sans que ce soit une catastrophe.

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

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2013
    Messages : 29
    Par défaut
    Cette solution d'indice n'est pas possible j'y avais pensé mais admettons qu'on veuille rajouter un test au milieu il faudra décaler tous les nombres des sections suivantes

    Pour répondre a qui traitera le fichier, il peut être edité par n'importe qui c'est pour cela qu'il doit rester simple il suffira d'écrire le nom du test le numéro et les fichier a utiliser pour verifier le test que l'on veut effectuer

    Il est donc impossible de differencier les variables portant le même nom dans la même section ? Ou même de les lire au fur et a mesure comme avec un readline() ?

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par nikaulas Voir le message
    Cette solution d'indice n'est pas possible j'y avais pensé mais admettons qu'on veuille rajouter un test au milieu il faudra décaler tous les nombres des sections suivantes
    Le numéro n'est que l'expression de l'option NO_TEST. S'il ne correspond pas a un numéro unique, pourquoi le renseigner?
    S'il est unique, ajouter un test au milieu du fichier n'impose pas de renuméroter les tests suivants.
    Mais peut être que pour vous c'est tests doivent être exécutées dans leur ordre d'apparition dans le fichier.

    Dans ce cas, le choix de les représenter sous cette forme est peut être prématuré: je doute que les fichiers INI "supportent" les répétitions et en tous cas, ConfigParser produit un dict qui perdra cet ordre.

    Comment représenter je ne sais trop quoi avec un fichier INI n'est pas un sujet qui pourra être traiter dans un forum de programmation: les forums Windows ont plus de chance d’être fréquentes par des qui savent.

    Dans un forum de programmation l'important sera ce que ça devient après la lecture et comment vous aller pouvoir utiliser cela.

    Une liste de dict ressemblant a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    tests = [
        dict(
            NOM_TEST = 'TEST11',
            NO_TEST = 2,
            CONFIG_DUT='cfg11',
            VERIF_MATLAB = 'analyse2',
            ),
        dict(
            NOM_TEST = 'xxx',
            ...,
        ),
        ....
    ]
    respecte l'ordre, permet d’insérer des tests au milieu, peut être modifie a l’éditeur car un script Python est aussi un fichier texte.
    In fine, quelque soit le format qui conviendra, sa lecture aboutira toujours a une structure similaire.
    En attendant d'avoir mieux définit le format de ce fichier, cela vous permet travailler sur le reste du programme.
    A vous de voir,
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2013
    Messages : 29
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Le numéro n'est que l'expression de l'option NO_TEST. S'il ne correspond pas a un numéro unique, pourquoi le renseigner?
    S'il est unique, ajouter un test au milieu du fichier n'impose pas de renuméroter les tests suivants.
    Mais peut être que pour vous c'est tests doivent être exécutées dans leur ordre d'apparition dans le fichier.
    C'est exactement ca les test doivents être exécuté dans l'ordre d'apparition des fichiers

    Citation Envoyé par wiztricks Voir le message
    Dans ce cas, le choix de les représenter sous cette forme est peut être prématuré: je doute que les fichiers INI "supportent" les répétitions et en tous cas, ConfigParser produit un dict qui perdra cet ordre.


    Une liste de dict ressemblant a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    tests = [
        dict(
            NOM_TEST = 'TEST11',
            NO_TEST = 2,
            CONFIG_DUT='cfg11',
            VERIF_MATLAB = 'analyse2',
            ),
        dict(
            NOM_TEST = 'xxx',
            ...,
        ),
        ....
    ]
    respecte l'ordre, permet d’insérer des tests au milieu, peut être modifie a l’éditeur car un script Python est aussi un fichier texte.
    In fine, quelque soit le format qui conviendra, sa lecture aboutira toujours a une structure similaire.
    En attendant d'avoir mieux définit le format de ce fichier, cela vous permet travailler sur le reste du programme.
    A vous de voir,
    - W
    Je ne connaissais pas les listes de dictionnaire,mais je vais chercher de ce côté merci bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Nom zone identique dans 2 fichiers
    Par brunodu60 dans le forum AS/400
    Réponses: 2
    Dernier message: 29/01/2010, 18h12
  2. [MySQL] 2 noms de champs identiques dans 2 tables différentes
    Par Shinoda00 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/06/2009, 09h23
  3. Réponses: 0
    Dernier message: 09/06/2008, 18h30
  4. Réponses: 10
    Dernier message: 21/02/2007, 20h16
  5. Eviter deux nombres identiques dans un tirage aléatoire
    Par moon tiger dans le forum Pascal
    Réponses: 5
    Dernier message: 25/11/2002, 09h57

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