代码之家  ›  专栏  ›  技术社区  ›  Purrell

如何保存配置文件/python文件IO

  •  0
  • Purrell  · 技术社区  · 16 年前

    我有以下python代码用于打开.cfg文件、写入并保存它:

    import ConfigParser 
    
        def get_lock_file():
            cf = ConfigParser.ConfigParser()
            cf.read("svn.lock")
            return cf
        def save_lock_file(configurationParser):
            cf = configurationParser
            config_file = open('svn.lock', 'w')
            cf.write(config_file)
            config_file.close()
    

    这似乎很正常,还是我遗漏了一些关于如何打开写保存文件的信息?有没有更标准的方法来读取和写入配置文件?

    我这样问是因为我有两个方法似乎做了同样的事情,它们得到配置文件句柄('cf')调用cf.set('blah','foo'bar),然后使用上面的save_lock_file(cf)调用。对于一种方法,它可以工作,而对于另一种方法,写操作永远不会发生,现在还不确定为什么。

    def used_like_this():
            cf = get_lock_file()
            cf.set('some_prop_section', 'some_prop', 'some_value')
            save_lock_file(cf)
    
    3 回复  |  直到 16 年前
        1
  •  13
  •   fuzzyman    16 年前

    请注意,使用ConfigObj配置文件处理更简单。

    要读取然后写入配置文件,请执行以下操作:

    from configobj import ConfigObj
    config = ConfigObj(filename)
    
    value = config['entry']
    config['entry'] = newvalue
    config.write()
    
        2
  •  1
  •   orip    16 年前

    我觉得不错。

    如果两个地方都打电话 get_lock_file cf.set(...) save_lock_file ,并且没有提出任何异常,这应该是可行的。

    如果有不同的线程或进程访问同一文件,则可能存在争用条件:

    1. 线程/进程A读取文件
    2. 线程/进程B读取文件
    3. 线程/进程A更新文件

    现在该文件只包含B的更新,而不包含A的更新。

    with 具有 ConfigParser 客户的文件:

    with open('example.cfg', 'wb') as configfile:
      config.write(configfile)
    
        3
  •  1
  •   Vinay Sajip    16 年前

    对我有用。

    C:\temp>type svn.lock
    [some_prop_section]
    Hello=World
    
    C:\temp>python
    ActivePython 2.6.2.2 (ActiveState Software Inc.) based on
    Python 2.6.2 (r262:71600, Apr 21 2009, 15:05:37) [MSC v.1500 32 bit (Intel)] on
    win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import ConfigParser
    >>> def get_lock_file():
    ...         cf = ConfigParser.ConfigParser()
    ...         cf.read("svn.lock")
    ...         return cf
    ...
    >>> def save_lock_file(configurationParser):
    ...         cf = configurationParser
    ...         config_file = open('svn.lock', 'w')
    ...         cf.write(config_file)
    ...         config_file.close()
    ...
    >>> def used_like_this():
    ...         cf = get_lock_file()
    ...         cf.set('some_prop_section', 'some_prop', 'some_value')
    ...         save_lock_file(cf)
    ...
    >>> used_like_this()
    >>> ^Z
    
    
    C:\temp>type svn.lock
    [some_prop_section]
    hello = World
    some_prop = some_value
    
    
    C:\temp>