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 :

ConfigParser et ses fonctions


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2005
    Messages : 52
    Par défaut ConfigParser et ses fonctions
    Bonsoir tout le monde,

    Je bloque actuellement sur quelque chose qui me semble incompréhensible. Voici le bout de code qui me bloque:

    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
    # Premier essai:
     
    cp = ConfigParser.RawConfigParser()
    cp.read("file.ini")
    if (cp.has_section("section") == False):
      cp.add_section("section")
    if (cp.has_option("section", "option") == False):
      cp.set("section", "option", True)
     
     
    # Deuxième essai:
     
    cp = ConfigParser.RawConfigParser()
    cp.read("file.ini")
    try:
      cp.get("section", "option")
    except ConfigParser.NoSectionError:
      cp.add_section("section")
    except ConfigParser.NoOptionError:
      cp.set("section", "option", True)
    J'ai donc testé pour mon premier essai de faire un print cp.has_section("section") et j'ai remarqué que ça retourne False à chaque fois... J'en viens donc à me demander si ces fonctions sont fonctionnelles ^^
    Pour la seconde solution, le problème est que la seconde exception n'est pas prise en compte.

    Voilà donc si quelque peut m'éclairer ça serait gentil ;-)
    Merci d'avance

  2. #2
    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,

    Il manque l'écriture sur disque des modifications faites, à la fin du 1er essai et à la fin de 2ème essai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cp.write(open('file.ini','w'))
    Avec cela, le fichier construit est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [section]
    option = True
    Par ailleurs, as-tu une raison particulière d'utiliser RawConfigParser() plutôt que ConfigParser() qui a des possibilités supplémentaires?

    Tyrtamos

  3. #3
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2005
    Messages : 52
    Par défaut
    J'ai bien la commande cp.write(mon fichier), il n'y aucun problème avec cela.
    Le problème est que lorsque je change de valeur mon option (par exemple je mets False au lieu de True), a chaque fois elle repasse a True.
    J'ai donc l'impression que les commandes has_section et has_option retournent toujours False même si ça existe.
    Et j'ai essayé avec ConfigParser.ConfigParser mais ça ne marchait pas non plus.


    Voici mon code complet de mon fichier verifications.py:

    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
    import ConfigParser 
     
    class verifications:
      def __init__(self, config):
     
        # Vérification des options
        cp = ConfigParser.ConfigParser()
        cp.read("yirc.ini")
        if (cp.has_section("yirc") == False):
          cp.add_section("yirc")
        if (cp.has_option("yirc", "autojoin") == False):
          cp.set("yirc", "autojoin", True)
        if (cp.has_section("channels") == False):
          cp.add_section("channels")
        if (cp.has_section("Serveurs") == False):
          cp.add_section("serveurs")
     
        # Enregistrement des données
        cp.write(config)
    A chaque fois mon fichier est récréé et réenregistré, même si les sections et options existent.
    Je sais que le fichier est forcément réenregistré, mais j'avais essayé aussi en mettant une variable "modif" à True quand une modification était effectué, afin de n'enregistrer que si nécessaire et ça réenregistrer tout de même.
    Je ne comprends vraiment pas.

  4. #4
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Tu mets quoi dans config ?
    J'espère que ce n'est pas le fichier yirc.ini ? (donc un truc du genre open('yirc.ini','w')).
    Sinon, c'est un peu normal d'obtenir toujours la même chose vu que tu écrases ton fichier avant de le reremplir.

  5. #5
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2005
    Messages : 52
    Par défaut
    Ooops
    Mais alors comment puis-je faire pour n'ouvrir qu'une seule fois le fichier ?

    Actuellement j'ai dans mon fichier principal
    config = open("yirc.ini", "wb")
    J'envoie cette valeur aux fonctions qui en ont besoin et je ferme le fichier dans mon fichier principal.

  6. #6
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    il suffit simplement que tu envoie en paramètre le nom du fichier.
    Et enlève aussi les == False (c'est très laid )

    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
    import ConfigParser 
     
    class verifications:
      def __init__(self, configfile):
     
        # Vérification des options
        cp = ConfigParser.ConfigParser()
        cp.read(configfile)
        if not cp.has_section("yirc"):
          cp.add_section("yirc")
        if not cp.has_option("yirc", "autojoin"):
          cp.set("yirc", "autojoin", True)
        if not cp.has_section("channels"):
          cp.add_section("channels")
        if not cp.has_section("Serveurs"):
          cp.add_section("serveurs")
     
        # Enregistrement des données
        cp.write(open(configfile, "w"))

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

Discussions similaires

  1. la bistromathique et ses fonctions
    Par xna-alain dans le forum C
    Réponses: 4
    Dernier message: 29/10/2010, 15h45
  2. Comment creer ses fonctions C/C++ sous ASE
    Par Rom95 dans le forum Adaptive Server Enterprise
    Réponses: 2
    Dernier message: 24/11/2009, 11h30
  3. Dupliquer un clip avec ses fonctions.
    Par dialga dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 05/11/2008, 09h41
  4. Faire ses fonctions VBA
    Par antoine46 dans le forum Access
    Réponses: 5
    Dernier message: 11/08/2006, 21h10
  5. Quel SGBD permet d'écrire ses fonctions d'agrégation SQL?
    Par Machin0410 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 28/03/2006, 17h31

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