現在の構成ファイルは次のとおりです。
mainwindow.title = 'test'
mainwindow.position.x = 100
mainwindow.position.y = 200
mainwindow.button.label = 'apply'
mainwindow.button.size.x = 100
mainwindow.button.size.y = 30
logger.datarate = 100
logger.enable = True
logger.filename = './test.log'
これはpythonでネストされた辞書に読み込まれます:
{
'mainwindow':{
'button':{
'label': {'value':'apply'},
...
},
'logger':{
datarate: {'value': 100},
enable: {'value': True},
filename: {'value': './test.log'}
},
...
}
これを行うより良い方法はありますか?アイデアは、XMLタイプの動作を取得し、できるだけ長くXMLを回避することです。エンドユーザーはほぼ完全にコンピュータの読み書きができないと想定され、基本的にメモ帳とコピーアンドペーストを使用します。したがって、python標準の「ヘッダー+変数」タイプは非常に難しいと考えられています。
ダミーユーザーは設定ファイルを編集し、有能なプログラマーが辞書を処理します。ネストされたディクショナリは、分割を容易にするために選択されます(ロガーはメインウィンドウのパラメーターを必要としないか、または持つこともできません)。
[〜#〜] yaml [〜#〜] のようなものを使用できます。次に例へのリンクを示します。
http://www.yaml.org/start.html
--- !clarkevans.com/^invoice
invoice: 34843
date : 2001-01-23
bill-to: &id001
given : Chris
family : Dumars
address:
lines: |
458 Walkman Dr.
Suite #292
city : Royal Oak
state : MI
postal : 48046
ship-to: *id001
product:
- sku : BL394D
quantity : 4
description : Basketball
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
tax : 251.42
total: 4443.52
comments: >
Late afternoon is best.
Backup contact is Nancy
Billsmer @ 338-4338.
Pythonバインディングは PyYAML で見つかります。JSONよりもユーザーフレンドリーです(2番目の例はこれです)。
あなたができる最善のことは、あなたのソリューションのモックアップ、そしておそらく他のいくつかのソリューションのモックアップを提供し、あなたのシステムの2人か3人の代表的なユーザーに尋ねることです。彼らは、このサイトで質問に答える自己選択の人々よりも、自分が何が好きかを伝えるのがはるかに上手になります。
そうは言っても、「基本的にコンピュータの読み書きができない」ユーザーにとっては、質問に表示する形式はおそらく最良のプレーンテキスト形式だと思います。それらが実際にコンピュータの読み書きができない場合は、簡単なGUIを検討して、構成ファイルを手動で編集する必要がないようにすることをお勧めします。
設定ファイルを読み込もうとしている英語を知らない中国人を想像してみてください。あるいは、構成ファイルがアラビア語である(そして、あなたがアラビア語を知らない)と想像してください。自問してみてください、これは本当に人間が読めるのですか?
読者が英語を知っていても、「logger.datarate = 100」が1秒あたり100文字を意味するか、100 GiB 1時間あたりを意味するか、または1メートルトンあたり100羽のニワトリを意味するか) 。
最も人間が読めるファイル形式は、適切なGUIベースのダイアログボックス/ウィザード/コンフィギュレータ(国際化対応、ヘルプシステムなど)を備えたバイナリファイルです。
あなたが失うことができるすべてを失います。 name.name.name=value
は、それぞれ別の行にあり、非常に簡単に取得できます。解析に引用符は必要ありません。true
がブール値である場合、およびtrue
が文字列である場合は、「愚かな人間」にそれを伝えないでください。文字列の場合、フィールドに先頭/末尾の空白を含めないようにするには、自分で削除します。
私はあなたが持っているもの(プロパティファイル)はすでに人間が読める構成フォーマットの中で最高だと言っています。 :)
ここに私の引数があります:
その最後のポイントは実際にはかなり重要です。最近のプロジェクトはすべてブランチに分割されていることを考えると、構成ファイルはブランチをマージするときに非常に苦痛を引き起こす可能性があります。プロパティファイルのようなフラットファイル形式は、ツリー構造ファイルよりもマージが簡単です。
パトリックヒューズと一緒です。設定を編集するためのシンプルなアプリを作成します。設定ファイル自体はもう少し複雑で、エディターが使用する属性(表示名、ヘルプテキスト、値のタイプ、最小/最大値など)を含む場合があります。