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

PyQt Python Discussion :

Lire un fichier ini [QtCore]


Sujet :

PyQt Python

  1. #1
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 474
    Par défaut Lire un fichier ini
    Bonjour,

    Je débute avec PyQT5 et je voudrais lire un fichier ini pour récupérer les clefs et les valeurs voulues. Comment faire?

    Merci par avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Par défaut
    Bonjour,
    La classe QSettings est faite pour ça.

  3. #3
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 474
    Par défaut
    Oui, mais je ne sais pas comment l'utiliser...

    Je voudrais par exemple récupérer la valeur de la clef 'toto' section 'enfant', pour tout lister je fais ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    settings=QSettings('ini/application.ini',QSettings.IniFormat);
     
    for k in settings.allKeys():
        print(settings.value(k))
    avec tkinter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #FTP parameters-------------------------------------------------------------------------------------
    CFG_FILE             = ConfigParser()
    CFG_FILE.optionxform = str
    CFG_FILE.read('ini/application.ini')
    #print(os.getlogin()+' connected')
    APPLICATION_NAME     = CFG_FILE.get('APPLICATION_PARAMETERS', 'APPLICATION_NAME')

  4. #4
    Membre chevronné
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Par défaut
    Cela devrait fonctionner. Je ne vois pas le problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(settings.value("enfant/toto"))
    Tu as un message d'erreur ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 474
    Par défaut
    Comme votre propostion tout est OK.

    Par si dans ma valeur il y a une virgule, mon retour est " ['Ma valeur (release, fr) V3.1']" alors que si je ne mets pas de virgule le retour est "Ma valeur (release fr) V3.1". Il y a une raison?

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    A noter que le module "ConfigParser" fourni avec Python sait bien gérer aussi les fichiers .ini.

    Et, en ce qui me concerne, je l'utilise, même pour mes programmes PyQt5, et je préfère travailler dans les programmes avec des dictionnaires ordonnés (collections.OrderedDict).

    Voilà un exemple:

    fichier.ini:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [section1]
    option1_1 = valeur1_1
    option1_2 = valeur1_2
    option1_3 = valeur1_3
     
    [section2]
    option2_1 = valeur2_1
     
    [section3]
    option3_1 = valeur3_1
    option3_2 = valeur3_2
    J'ai créé les 2 fonctions nécessaires pour lire et écire les fichiers ini:

    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
    # -*- coding: utf-8 -*-
    # Python >=3.2
     
    from configparser import ConfigParser
     
    from collections import OrderedDict
     
    #############################################################################
    def chargini(ficini, encodage="utf-8"):
        """Charge le contenu du fichier ficini (type .ini) avec l'encodage donné
           Retourne le dictionnaire de dictionnaires (OrderedDict) des données
        """
        cfg = ConfigParser(interpolation=None)
        with open(ficini, 'r', encoding=encodage) as fsrce:
            cfg.read_file(fsrce)
        dicini = OrderedDict()
        for section in cfg.sections():
            dicini[section] = OrderedDict()
            for option, valeur in cfg.items(section):
                dicini[section][option] = valeur
        return dicini
     
    #############################################################################
    def sauvini(dicini, ficini, encodage="utf-8"):
        """Sauve le dictionnaire de dictionnaires (OrderedDict) dicini dans le 
           fichier ficini (type .ini) avec l'encodage donné
        """
        cfg = ConfigParser(interpolation=None)
        cfg.read_dict(dicini, source='<OrderedDict>') 
        with open(ficini, 'w', encoding=encodage) as fdest:
            cfg.write(fdest)
    L'utilisation est très simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # chargement
    dico = chargini("fichier.ini", encodage="utf-8")
     
    # affichage du dictionnaire de dictionnaires ordonné:
    for section in dico:
        for option in dico[section]:
            print(section, option, dico[section][option])
     
    # enregistrement
    sauvini(dico, fichier2.ini", encodage="utf-8")
    Ce qui affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    section1 option1_1 valeur1_1
    section1 option1_2 valeur1_2
    section1 option1_3 valeur1_3
    section2 option2_1 valeur2_1
    section3 option3_1 valeur3_1
    section3 option3_2 valeur3_2
    Comme on n'a pas modifié le dictionnaire dico, le fichier écrit "fichier2.ini" est identique au fichier lu "fichier.ini". C'est l'avantage des dictionnaires ordonnés de ne pas changer l'ordre des clés.

  7. #7
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 474
    Par défaut
    Merci

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

Discussions similaires

  1. Comment lire un fichier Ini ?
    Par aloisio11 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 31/10/2007, 19h07
  2. Lire un fichier INI sur le net
    Par Faith's Fall dans le forum C++Builder
    Réponses: 6
    Dernier message: 14/01/2007, 19h48
  3. Lire/écrire fichier .ini
    Par chillansky dans le forum VBScript
    Réponses: 2
    Dernier message: 03/10/2006, 16h56
  4. Lire un fichier .ini sous Linux
    Par cheprod dans le forum Linux
    Réponses: 2
    Dernier message: 26/04/2006, 17h34
  5. Probleme pour lire un fichier Ini
    Par Sebinou dans le forum C++Builder
    Réponses: 11
    Dernier message: 10/03/2004, 23h22

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