質問

.cfgファイルを開いて書き込み、保存するためのPythonコードがあります:

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()

これは普通のように見えますか、またはファイルを開いて書き込み保存する方法について何かが欠けていますか?構成ファイルを読み書きするより標準的な方法はありますか?

同じことをするように見える2つのメソッドがあるので、私は尋ねます、それらは設定ファイルハンドル( '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 を呼び出し、例外が発生しない場合、これは動作するはずです。

同じファイルにアクセスする異なるスレッドまたはプロセスがある場合、競合状態になる可能性があります:

  1. スレッド/プロセスAがファイルを読み取ります
  2. スレッド/プロセスBがファイルを読み取ります
  3. スレッド/プロセスAはファイルを更新します
  4. スレッド/プロセスBはファイルを更新します

現在、ファイルにはBの更新のみが含まれ、Aの更新は含まれていません。

また、安全なファイル書き込みのために、 with ステートメント(Python 2.5以降)を忘れないでください。try/ finallyを保存します(使用している場合は使用する必要があります) with を使用しないでください)。 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>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top