5 Réponses :


1
votes

nouvelle version de la réponse:

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.

(l'ancienne version a supposé l'utilisation du module ConfigparaSer standard, d'où les commentaires.)


5 commentaires

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" .



4
votes

Oui, malheureusement configobj ne suit pas les règles de mise en forme standard normales de Python, donc %% , 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.

La seule façon dont je peux penser à avoir une séquence littérale % (FOO) S dans une valeur CONFIGOBJ serait d'assurer une partie de cette séquence est en soi généré par un remplacement: xxx


0 commentaires

3
votes

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 interpolation = "modèle" . Il a deux avantages.

  1. n'interfère pas avec% signes.
  2. Soutien à l'échappement. ( $$ est interpolé à $ .)

    L'exemple ressemblerait à: xxx


1 commentaires

C'est la méthode à utiliser! Notez que cfg = configobj.configobj (..., interpolation = 'modèle') semble avoir aucun effet sur la validation et une version ultérieure cfg.validate (...) échouera toujours. Ce qui fonctionne de modifier l'interpolateur par défaut en paramétrage configobj.default_interpolation = "modèle" . Cela fonctionne à la fois dans Python 2 et Python 3.



3
votes

Essayez d'utiliser '%' + '(foo) s'. Cela a fonctionné pour moi lors de la gestion de ConfigParse.


0 commentaires

11
votes

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: xxx

dans mon fichier de script python: xxx

espérons que cela aide quelqu'un à l'avenir (:


0 commentaires