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
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
Bonjour,
La classe QSettings est faite pour ça.
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:
avec tkinter:
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))
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')
Cela devrait fonctionner. Je ne vois pas le problème.
Tu as un message d'erreur ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part print(settings.value("enfant/toto"))
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?
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:
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 [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
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
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)
Ce qui affiche:
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")
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.
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
Partager