代码之家  ›  专栏  ›  技术社区  ›  Helmut Grohne

如何在configobj值中转义%符号?

  •  11
  • Helmut Grohne  · 技术社区  · 14 年前

    对于 configobj "%(foo)s" % somedict . 不幸的是,configobj使用相同的插值机制,我还没有找到逃逸它的方法。理想情况下,我的价值观是:

    othervar = foo
    someconfigobjkey = %(othervar)s %%(runtimevar)s
    

    5 回复  |  直到 14 年前
        1
  •  1
  •   Sven Marnach    14 年前

    答案的新版本:

    可以使用“.format()(Python2.6或更高版本)或string.Template(Python2.4或更高版本)进行运行时插值,这两种方法都可以消除冲突。

    (旧版本假定使用标准的ConfigParser模块,因此使用注释。)

        2
  •  11
  •   Erico    10 年前

    在我的config.ini文件中:

    [LOGGING]
    format = %%(asctime)-15s %%(message)s
    

    在我的python脚本文件中:

    import configparser
    
    # Load configuration
    config = configparser.ConfigParser()
    config.read("config.ini")
    
    log_config = config['LOGGING']
    
    print(log_config['format']) # prints out '%(asctime)-15s %(message)s'
    

    希望它能帮助将来的人(:

        3
  •  4
  •   bobince    14 年前

    %% ,否则这将是逃离百分比符号的正确方法,但失败了。在我看来有点设计缺陷。

    %(foo)s configobj值中的序列将确保该序列的一部分本身由替换生成:

    >>> import configobj
    >>> c= configobject.ConfigObj()
    >>> c['foo']= 'bar'
    >>> c['pc']= '%'
    >>> c['v']= '%(foo)s %(pc)s(foo)s'
    >>> c['v']
    'bar %(foo)s'
    
        4
  •  3
  •   timjr    12 年前

    尝试使用“%”+(foo)s“。在处理ConfigParser时,这对我很有用。

        5
  •  2
  •   Helmut Grohne    14 年前

    interpolation="template" . 它有两个优点。

    1. 支持转义。( $$ 被插值到 $ .)

    othervar = foo
    someconfigobjkey = $othervar %(runtimevar)s
    
    推荐文章