2017-03-22 17 views
0

私はいくつかのデバイスで動作するようにPython 3でプログラムを書いています。そして、私は各デバイスの定数を格納する必要があります。一部の定数はすべてのデバイスで一般的なもので、固定的に固定されていますが、デバイスのファームウェアのバージョンによって、バージョンによって異なるものがあります。最後のものだけでなく、すべてのバージョンの定数を保存する必要があります。さまざまなデバイスや複数のバージョンの定数を定義するPythonの方法を教えてください。Python複数バージョンの定数

私の現在のソリューションは、次のようになります。

general = { 
    'GENERAL_CONST_1': 1, 
    'GENERAL_CONST_2': 2, 
    ... 
    'GENERAL_CONST_N': N 
} 


device_1 = dict() 
device_1[FIRMWARE_VERSION_1] = { 
    'DEVICE_1_CONST_1': 1, 
    'DEVICE_1_CONST_2': 2, 
    ... 
    'DEVICE_1_CONST_N': N 
} 
device_1[FIRMWARE_VERSION_1].update(general) 

device_1[FIRMWARE_VERSION_2] = { 
    'DEVICE_1_CONST_1': 1, 
    'DEVICE_1_CONST_2': 2, 
    ... 
    'DEVICE_1_CONST_N': N 
} 
device_1[FIRMWARE_VERSION_2].update(general) 


device_2 = dict() 
device_2[FIRMWARE_VERSION_1] = { 
    'DEVICE_2_CONST_1': 1, 
    'DEVICE_2_CONST_2': 2, 
    ... 
    'DEVICE_2_CONST_N': N 
} 
device_2[FIRMWARE_VERSION_1].update(general) 

device_2[FIRMWARE_VERSION_2] = { 
    'DEVICE_2_CONST_1': 1, 
    'DEVICE_2_CONST_2': 2, 
    ... 
    'DEVICE_2_CONST_N': N 
} 
device_2[FIRMWARE_VERSION_2].update(general) 

は、事前にありがとうございます!あるいは、もしあなたが私が上記のことを読むことができる方向に私を向けることができれば、私もこれに感謝するでしょう。

UPD1:私はINI/JSON/YAML/TSON ...形式のいずれかを使用することにしました@languitarする

感謝。たとえば、ライブラリpython-anyconfigでサポートされているフォーマットです。フォーマットINI(@languitar configparserの提案)は私の目的によく見えます(TSONも興味深いようです)。残念ながら、どちらも16進値をサポートしていません。とてもびっくりした。しかし、私のすべての定数は16進形式でなければなりません。そして私はYAML形式を試してみました。ただ、すべて大文字にあなたの名前を変更する

# General consts for all devices and all versions 
general: &general 
    GENERAL_CONST_1: 1 
    GENERAL_CONST_2: 2 
    ... 
    GENERAL_CONST_N: N 

# Particular consts for device_1 for different firmware version 
device_1: &device_1 
    <<: *general 
    # General consts for device_1 and all firmware versions 
    DEVICE_1_CONST_1: 1 
device_1: 
    FIRMWARE_VERSION_1: 
     <<: *device_1 
     DEVICE_1_CONST_2: 2 
     ... 
     DEVICE_1_CONST_N: N 
    FIRMWARE_VERSION_2: 
     <<: *device_1 
     DEVICE_1_CONST_2: 2 
     ... 
     DEVICE_1_CONST_N: N 

# Particular consts for device_2 for different firmware version 
device_2: &device_2 
    <<: *general 
    # General consts for device_2 and all firmware versions 
    DEVICE_1_CONST_1: 1 
device_2: 
    FIRMWARE_VERSION_1: 
     <<: *device_2 
     DEVICE_1_CONST_2: 2 
     ... 
     DEVICE_1_CONST_N: N 
    FIRMWARE_VERSION_2: 
     <<: *device_2 
     DEVICE_1_CONST_2: 2 
     ... 
     DEVICE_1_CONST_N: N 

しかし、私は、これはデバイスの定数を格納するための正しい方法であるかどうか、確認していないとそのすべてのファームウェアのバージョン

+0

あなたの定数はまったく一定ではないかもしれません。本当に必要なのはデバイス固有の設定です。 ['configparser'](https://docs.python.org/3/library/configparser.html)モジュールを使用します。 – languitar

+0

@languitar、あなたの答えに多くの感謝!それは私にとって興味深い解決策のようです。私は今それを実装しようとします。 –

+0

@languitar、私は言及していないが、私は16進形式の定数を格納する必要があります。残念ながら、[configparser](https://docs.python.org/3/library/configparser.html)はサポートしていません。しかし、私は同様の方法(YAML形式)を試み、それに応じて私の質問を更新しました。 –

答えて

0

:今、このようになり、定数を持つファイル

like GENERAL, DEVICE_1, etc

+0

ありがとうございますが、私が必要とするものではありません。いくつかの一般的なconstを保存しなければならない場合、私はこの方法を選択しましたが、難しさはデバイスやファームウェアの違いによって異なるconstになります。 –

関連する問題