Как сохранить файл конфигурации / файл ввода-вывода Python
-
07-07-2019 - |
Вопрос
У меня есть этот код 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)
Решение
Просто обратите внимание, что обработка файла конфигурации проще с ConfigObj.
Чтобы прочитать, а затем написать файл конфигурации:
from configobj import ConfigObj
config = ConfigObj(filename)
value = config['entry']
config['entry'] = newvalue
config.write()
Другие советы
Выглядит хорошо для меня.
Если в обоих местах вызывается get_lock_file
, затем cf.set (...)
, а затем save_lock_file
, и никаких исключений не возникает, это должно работать.
Если у вас разные потоки или процессы, обращающиеся к одному и тому же файлу, у вас может быть условие гонки:
<Ол>Теперь файл содержит только обновления B, а не A.
Кроме того, для безопасной записи файлов не забывайте инструкцию with
(Python 2.5 и выше), это сэкономит вам попытку / наконец (что вы должны использовать, если вы не используется с
). Из документов ConfigParser
:
with open('example.cfg', 'wb') as configfile:
config.write(configfile)
У меня работает.
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>