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 :

Trier données sous forme de dictionnaire dans un fichier


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Trier données sous forme de dictionnaire dans un fichier
    Bonjour

    Je suis en train de réaliser un programme, il me faudrait trier les données d'un fichier, fichier organisé comme un dictionnaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def MajPalmares(nom,scoreusr):
     
        dico = {}
        dico[nom]=scoreusr
        fichierPalmares = open('palmares.txt', 'a')
        fichierPalmares.write(str(dico))
        fichierPalmares.write("\n")
        fichierPalmares.close()
    les données se présentent donc sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    {'bebert': 66.66666666666666}
    {'robert': 100.0}
    {'tabac': 50.0}
    {'tabacoo': 100.0}
    {'jFKHMFHISOFH': 0.0}
    {'hjgbghyjfghfdjtrjd': 100.0}
    {'hjgghfghghfcgh': 0.0}
    {'hvfghf': 0.0}
    Je ne peux les réintégrer, ni dans une liste, ni dans un dico afin de les trier (sort) à cause du type
    Une idée ?

  2. #2
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    utiliser pickle, shelve ou anydbm:

  3. #3
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Citation Envoyé par pinard Voir le message
    Je ne peux les réintégrer, ni dans une liste, ni dans un dico afin de les trier (sort) à cause du type
    Une idée ?
    La je n ai pas compris. Car a mon avis...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    txt = """{'bebert': 66.66666666666666}
    {'robert': 100.0}
    {'tabac': 50.0}
    {'tabacoo': 100.0}
    {'jFKHMFHISOFH': 0.0}
    {'hjgbghyjfghfdjtrjd': 100.0}
    {'hjgghfghghfcgh': 0.0}
    {'hvfghf': 0.0}"""
     
    lst = txt.split("\n")
    print (lst)
    nlst = sorted([eval(i) for i in lst])
    print (nlst)
    Et puis, je ne trouve pas tres jolie d ainsi sauvegarder des données dans des fichiers. Vous pourrier utilise le module CSV pour avoir un fichier "réutilisable".
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Voilà une solution très simple que j'ai déjà utilisée. Ce n'est pas forcément élégant (à cause de l'eval), mais ça marche pour des données de base. Exemple pour récupérer la 1ère ligne d'un fichier test.txt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    f = open("test.txt", 'r')
     
    R = eval(f.readline().rstrip())
     
    print R
    {'bebert': 66.66666666666666}
    print type(R)
    <type 'dict'>
    print R['bebert']
    66.6666666667
    f.close()
    Il existe cependant de nombreuses solutions plus officielles pour faire la même chose, à commencer par configparser ou même shelve.

    [Edit]: comme je me suis un peu amusé avec ce genre de pb, peut-être trouveras-tu ici une source d'inspiration: http://python.jpvweb.com/mesrecettes...e_recup_objets
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

Discussions similaires

  1. Réponses: 7
    Dernier message: 05/04/2014, 08h53
  2. Réponses: 5
    Dernier message: 18/11/2013, 16h20
  3. Réponses: 1
    Dernier message: 16/08/2012, 01h57
  4. Réponses: 8
    Dernier message: 11/07/2012, 16h05
  5. Réponses: 5
    Dernier message: 05/04/2009, 13h14

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