Python for Windows でプログラムを作成しています。変数とユーザー設定を保存して、プログラムを終了して再起動した後でもそれらを呼び出せるようにしたいと考えています。
Windowsマシンでこれを行う理想的な方法はありますか? _winreg
Windows レジストリはこのタスクに適していますか? それとも、独自のデータベースを作成する必要がありますか?
Python for Windows でプログラムを作成しています。変数とユーザー設定を保存して、プログラムを終了して再起動した後でもそれらを呼び出せるようにしたいと考えています。
Windowsマシンでこれを行う理想的な方法はありますか? _winreg
Windows レジストリはこのタスクに適していますか? それとも、独自のデータベースを作成する必要がありますか?
Python2 には、Python3 の configparser であるConfigParserがあります。
import ConfigParser, os
config = ConfigParser.ConfigParser()
config.readfp(open('defaults.cfg'))
config.read(['site.cfg', os.path.expanduser('~/.myapp.cfg')])
Windows 上でさえ、レジストリはスカムと極悪の惨めなハイブであり、それを使用して Python アプリの構成を保存するべきではないことに注意する必要があります。
通常、「ホーム」フォルダーの構成フォルダーに保存することをお勧めします。これは *nix システムでは簡単ですが、Windows ではより困難です。実際に「アプリケーション データ」ディレクトリを取得する必要があるからです。これは通常私にとってはうまくいきます:
import os
if os.name != "posix":
from win32com.shell import shellcon, shell
homedir = "{}\\".format(shell.SHGetFolderPath(0, shellcon.CSIDL_APPDATA, 0, 0))
else:
homedir = "{}/".format(os.path.expanduser("~"))
ホームディレクトリを作成したら、プロジェクトにちなんだ名前のフォルダーを作成する必要があります。
if not os.path.isdir("{0}.{1}".format(homedir,projectname)):
os.mkdir("{0}.{1}".format(homedir,projectname))
次に、そのフォルダーに構成ファイルを作成し、選択した形式でオプションを書き込みます (私の個人的なお気に入りは XML です)。
何かが足りない場合を除いて、正規表現はWindowsレジストリとは何の関係もありません。ユーザーのホームディレクトリなど、どこかに設定ファイルを保存するだけです。少なくとも、Linuxで行うことです。ファイルをどこかに保存します。~/.config/
いくつかの方法があり、2つの主な方向に分けられます
_winreg
ます。レジストリを使用して、設定を別のマシンに転送したり、それらを検査またはバックアップしたりすることは簡単ではありません。あなたはregedit
それらのために使わなければならないでしょう。
もう1つの方法は、ユーザーの「マイドキュメント」フォルダにあるファイルに設定を保存します。これにより、設定を別のマシンまたはユーザーに簡単に移動でき、プログラムの設定を他のアプリケーションのホストの設定と混同することはありません。したがって、それらのバックアップや復元などは簡単です。1つのファイルをコピーするだけです。テキスト形式を選択すると、設定の検査とデバッグも簡単になります。
cPickle
モジュールと一緒に保存します。これはおそらく最も簡単な方法の1つです。欠点として、ピクルス化されたデータはデフォルトでASCII形式を使用しますが、人間が読める形式ではありません。ConfigParser
、Windowsのファイルと同様の構造で構成ファイルを保存およびロードし.ini
ます。これらのファイルは人間が読める形式です。json
設定をjson形式で保存します。これらのファイルは人間が読める形式です。execfile()
。注意:これは任意のコードの実行に使用される可能性があるため、安全上の考慮事項があります。しかし、良い面としては、非常に簡単で読みやすいです。pickle
モジュールは当然の選択ですが、それが書き込むファイルは人間が判読できなくなります。構成ファイルの場合、構成ファイルが、ユーザーが読み取ったり編集したりできる単純なテキスト形式であるとよいでしょう。したがって、JSON とjson
モジュールを使用することをお勧めします。
変数を保存するには、ピクルを使用することをお勧めします