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 :

Variable avec 1 clé & 3 valeurs


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité(e)
    Invité(e)
    Par défaut Variable avec 1 clé & 3 valeurs
    Bonjour à tous,

    je débute en python, je m'y connais un peu en C & Java, veuillez excusez mes questions triviales

    Soit un fichier de configuration avec les valeurs suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A 1 5 6
    B 3 9 8
    C 8 0 1
    ...
    Soit 'A' la clé, et 1,5,6 les 3 valeurs associées à 'A'

    J'essaie de récupérer les valeurs du fichier texte, et souhaite les stocker dans une (ou plusieurs) variable(s). En C, je serai tenté de faire un tableau à 4 dimensions, mais en python ?

    Voici mon code hyper simpliste en python, mais c'est pas tip top pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fileCfg = open('fichier.cfg', 'r')
    for line in fileCfg.readlines():
     a, b, c, d = line.split('\t')
     e, null = d.split('\n', 1)
     print a, b, c, e
    fileCfg.close()
    Comment feriez-vous pour avoir ce genre de variable ?

    Merci

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Déjà, je te conseille d'indenter avec plus d'un espace, question de lisibilité
    Si j'ai bien compris, il s'agit simplement d'associer 3 valeurs à une même clé.
    Le plus simple, je pense, est d'utiliser un dictionnaire, qui se chargera du comportement clé->valeur, et de stocker dans ce dictionnaire sous forme de listes ou de tuples (listes si l'immuabilité des tuples est gênante).
    Si le but de ton deuxième split est simplement d'enlever le retour à la ligne final, la méthode rstrip est là pour ça (à toi de voir comment tu veux gérer d'éventuels caractères d'espacement supplémentaires)
    Enfin, si tu te contentes de lire le fichier ligne par ligne, inutile d'utiliser readlines (charge tout le fichier en mémoire), tu peux itérer sur le descripteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    fileCfg = open('fichier.cfg', 'r')
    cfg = {} #On crée un dictionnaire vide
    for line in fileCfg:
        cle, x = line.split('\t', 1) #On isole la clé
        x = x.rstrip() #On enlève les caractères d'espacement superflus à la fin
        val = x.split('\t')[:3] #On sépare les valeurs, on ne garde que les 3 premières
        print cle, val
        cfg[cle] = val #On ajoute la ligne au dico
    fileCfg.close()
    print cfg
    Avec les données que tu as fournies comme exemple, le programme affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A ['1', '5', '6']
    B ['3', '9', '8']
    C ['8', '0', '1']
    {'A': ['1', '5', '6'], 'C': ['8', '0', '1'], 'B': ['3', '9', '8']}

  3. #3
    Membre confirmé Avatar de arnaudk
    Inscrit en
    Février 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 38
    Par défaut
    Salut,

    Suis pas spécialiste, mais si le nombre de variables n'est pas trop élevé, on peut envisager de les enregistrer dans une liste de listes, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fileCfg = open('fichier.cfg', 'r')
    liste = []
    for line in fileCfg.readlines():
     a = line.split('\t')
     liste.append(a)
     print a
    print liste
    fileCfg.close()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var = [["A", "1", "5", "6"], ["B", "3", "9", "8" ], ["C", "8", "0", "1"], ...]
    Accéder à la 2e valeur de B devient simple :

    Il faut juste encore nettoyer un peu le code pour en lever les "\n".

    EDIT : solution de oiffrig plus rapide et meilleure.

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Merci à vous deux, la solution du dictionnaire est parfaite !

    Pour l'indentation, c'est juste le copier/coller qui a foiré

    Je vais regarder de plus prêt l'utilisation des dico !

    ++

Discussions similaires

  1. Réponses: 10
    Dernier message: 27/08/2008, 21h00
  2. Macro variable avec valeur contenant &
    Par Fatah93 dans le forum Macro
    Réponses: 2
    Dernier message: 19/05/2008, 15h11
  3. Déclaration d'un variable avec 2 valeurs
    Par webfranc dans le forum SQL
    Réponses: 3
    Dernier message: 15/05/2008, 15h52
  4. changer la valeur d'une variable avec 2 bouton
    Par toutounesan_bg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 03/08/2007, 10h51
  5. Affichage des valeurs des variables avec tkprof
    Par hkhan13 dans le forum Oracle
    Réponses: 2
    Dernier message: 04/07/2006, 11h59

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