設定ファイル/ PythonファイルIOを保存する方法
-
07-07-2019 - |
質問
.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
を呼び出し、例外が発生しない場合、これは動作するはずです。
同じファイルにアクセスする異なるスレッドまたはプロセスがある場合、競合状態になる可能性があります:
- スレッド/プロセスAがファイルを読み取ります
- スレッド/プロセスBがファイルを読み取ります
- スレッド/プロセスAはファイルを更新します
- スレッド/プロセス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>
所属していません StackOverflow