J'aimerais utiliser à la fois une interpolation d'analyse et d'exécution d'analyses pour des valeurs d'un Configobj < / a> fichier de configuration. Le moyen le plus simple de faire une interpolation de chaîne simple dans Python est Cependant, configobj tente (et échoue) pour remplacer la deuxième variable. Une autre façon de répondre à cette question est de fournir une autre voie différente (ConfigObj) de faire l'interpolation de temps d'analyse et d'exécution. P> p> "% (foo) S"% Somedict code>. Malheureusement, configobj utilise le même mécanisme d'interpolation et je n'ai pas encore trouvé de moyen de l'échapper. Idéalement, ma valeur ressemblerait à:
5 Réponses :
nouvelle version de la réponse: p>
Vous pouvez utiliser "" .format () (python 2.6 ou supérieur) ou string.template (python 2.4 ou supérieur) pour l'interpolation d'exécution - qui éliminerait les deux conflits. P>
(l'ancienne version a supposé l'utilisation du module ConfigparaSer standard, d'où les commentaires.) p>
Comme je l'ai dit dans ma question initiale, j'utilise configobj et non configparyser. Peut-être que j'ai supposé que ce module soit connu trop loin de toute façon que l'on puisse trouver sur voidspace.org. UK / Python / ConfigoBj.html .
Désolé, je ne connaissais pas ce module et je ne l'ai pas reconnu comme un nom de module dans votre message non plus. Toute raison de ne pas utiliser le module de configuration standard? Si cela vous ferait aussi pour vous aussi, le problème serait également résolu :)
Dans le choix des entreprises, le choix des outils n'est pas toujours donné.
Peut-être que vous pourriez utiliser string.template ou "" .Format () au lieu de% de substitution de l'interpolation de Tuntime - cela éliminerait le conflit.
Votre dernière proposition constitue une nouvelle réponse complète, qui fonctionne ainsi que interpolation = "modèle" code>.
Oui, malheureusement configobj ne suit pas les règles de mise en forme standard normales de Python, donc La seule façon dont je peux penser à avoir une séquence littérale %% code>, qui seraient autrement la bonne façon d'échapper à un signe pour cent, échoue. Semble être un peu un défaut de conception pour moi.
% (FOO) S code> dans une valeur CONFIGOBJ serait d'assurer une partie de cette séquence est en soi généré par un remplacement: p>
creuser plus profondément dans la documentation J'ai trouvé une solution qui convient mieux à celle proposée par Bobince: Utilisez un moteur d'interpolation différent, tel que L'exemple ressemblerait à: p> interpolation = "modèle" code>. Il a deux avantages.
$$ code> est interpolé à
$ code>.) li>
ol>
C'est la méthode à utiliser! Notez que cfg = configobj.configobj (..., interpolation = 'modèle') code> semble avoir aucun effet sur la validation et une version ultérieure
cfg.validate (...) code> échouera toujours. Ce qui fonctionne de modifier l'interpolateur par défaut en paramétrage
configobj.default_interpolation = "modèle" code>. Cela fonctionne à la fois dans Python 2 et Python 3.
Essayez d'utiliser '%' + '(foo) s'. Cela a fonctionné pour moi lors de la gestion de ConfigParse. P>
Les choses ont peut-être changé depuis que cette question a été publiée, mais j'ai découvert que vous pouvez échapper à l'utilisation du caractère «%». Cela a fonctionné pour moi en Python 3.
dans mon fichier config.ini: p> dans mon fichier de script python: p> espérons que cela aide quelqu'un à l'avenir (: p> p>