2009-09-14 53 views
0

我打开.cfg文件,写它,并将其保存这个Python代码:如何保存配置文件/ Python文件IO

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) 

回答

13

只要注意ConfigObj的配置文件处理更简单。

要读,然后写一个配置文件:

from configobj import ConfigObj 
config = ConfigObj(filename) 

value = config['entry'] 
config['entry'] = newvalue 
config.write() 
+0

啊,真的吗?如果我使用这个,我不必担心打开和关闭文件等。 – Purrell 2009-09-15 18:30:44

+0

阅读文档。我懂了。甜。 – Purrell 2009-09-15 18:43:37

+0

Nope - ConfigObj根据需要处理打开和关闭文件。 – fuzzyman 2009-09-19 23:03:50

1

对我很好。

如果两个地方都叫get_lock_file,然后cf.set(...),然后save_lock_file,并且没有例外,这应该工作。

如果你有不同的线程或进程访问你可以有一个竞争条件相同的文件:

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

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

此外,安全文件写入,不要忘了with声明(Python的2.5及以上),它会为你节省一个try /最后(你应该,如果你不使用with使用)。来自ConfigParser的文档:

with open('example.cfg', 'wb') as configfile: 
    config.write(configfile) 
+0

确定好的。补充说。 – Purrell 2009-09-14 19:33:45

1

适用于我。

 
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> 
+0

好吧。所以我并不疯狂。它看起来不像我做IO的方式有问题,必须是其他方法。谢谢你的插入。我会upvote,但需要15名代表 – Purrell 2009-09-14 19:35:41