【问题标题】:Update field with ConfigParser -Python-使用 ConfigParser -Python- 更新字段
【发布时间】:2011-03-14 23:06:21
【问题描述】:

我认为 ConfigParser 模块的 set 方法会更新给定的字段,但是,更改似乎只保留在内存中,并没有进入配置文件。这是正常行为吗?

我也尝试过 write 方法,但我得到的是另一个复制的部分,到目前为止这不是我想要的。

这是一个代表我正在做的事情的样本:

import sys
import ConfigParser 

   if __name__=='__main__':    
   cfg=ConfigParser.ConfigParser()
   path='./../whatever.cfg/..'
   c=cfg.read(path)
   print cfg.get('fan','enabled')
   cfg.set('fan','enabled','False')       
   c=cfg.read(path)
   print cfg.get('fan','enabled')

【问题讨论】:

    标签: python configparser


    【解决方案1】:
    1. 打开配置文件
    2. 使用 ConfigParser 读取内容
    3. 关闭文件
    4. 现在在内存中更新配置
    5. 用 w+ 打开同一个文件
    6. 将更新后的内存内容写入文件
    7. 关闭文件

    【讨论】:

    • 为什么您认为需要第 3/5 步?我猜如果两个进程几乎同时写入同一个文件,这可能会产生不一致。
    【解决方案2】:
    from ConfigParser import SafeConfigParser
    parser = SafeConfigParser()
    parser.read('properties.ini')
    dhana = {'key': 'valu11'}
    parser.set('CAMPAIGNS', 'zoho_next_campaign_map', str(dhana))
    with open("properties.ini", "w+") as configfile:
        parser.write(configfile)
    

    【讨论】:

      【解决方案3】:

      是的,set 对内存中的信息而不是最初读取信息的文件进行操作是正常的。

      write 应该是你想要的。您究竟是如何使用它的,它到底做了什么,与您想要的有何不同?

      顺便说一句,您通常应该使用 ConfigParser.SafeConfigParser 而不是 ConfigParser.ConfigParser,除非有特定的理由这样做。

      随着 Python 3.x 的发展,SafeConfigParser 将被合并/重命名为 ConfigParser,因此 SafeConfigParser 最终将被弃用并逐步淘汰。

      【讨论】:

      • 这是我使用 write 的方式:使用 open(self.path,'a') 作为配置文件:self.cfg.write(configfile) write(self .cfg)
      • 为什么要附加到文件而不是替换它?
      • 因为常识,我想。如果您只想更改单个字段,为什么还要重写整个文件?
      • 假设单个字段定义在文件的开头(或者,事实上,在结尾以外的任何地方)。然后您的选择是:(1)重写文件或(2)附加到文件并接受冗余。如果配置反复更改,选项 2 会变得非常糟糕,所以选项 1 是。如果这违背了您的常识,那么您可能需要考虑您的常识需要稍作调整的可能性。
      • 我喜欢你的最后一句话。哈哈。
      【解决方案4】:

      我遇到了同样的问题,发现这对我有用:

      def update_system_status_values(file, section, system, value):
          config.read(file)
          cfgfile = open(file, 'w')
          config.set(section, system, value)
          config.write(cfgfile)
          cfgfile.close()
      

      1) 阅读它

      2) 打开它

      3) 更新它

      4) 写出来

      5) 关闭它

      【讨论】:

        猜你喜欢
        • 2015-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-13
        • 2012-02-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多