2016-11-18 130 views
0

example.py 這是一個python腳本,它有一個多級字典。如何更新另一個python文件中的多級字典?

test_dict = {'path': '/home/user/user_name', 
'device1': {'IP': '10.10.10.10', 
      'password': 'pwd1', 
      'username': 'user1', 
      'name':'USER_DEFINED'}, 
'device2': {'IP': '11.11.11.11', 
      'password': 'pwd2', 
      'username': 'user2', 
      'name':'USER_DEFINED_TEST'} 
} 

我已經寫了一個單獨的python腳本來更新'example.py'中的字典。目前,我可以通過選項解析器處理第一級字典[例如:路徑和它的值]。 python example.py --key path --value /home/user/user_name。所以,現在爲了處理更新多級字典值。我如何優化它?你可以幫我嗎 ?

Working : 
    file_abs_path = "C://Test_Folder//example.py" 
    module = imp.load_source('test_dict', file_abs_path) 
    f_dict = module.test_dict 
    if f_key != "": 
     for key, value in f_dict.items(): 
     if key == f_key: 
      f_dict[f_key] = f_value 

parser.add_option("-k", "--key", dest="key",default="",help="") 

parser.add_option("-v", "--value", dest="value",default="",help="") 
f_key = options.key 
f_value = options.value 

如果在所有更新DEVICE1名&設備2名,也可能是DEVICE1設置名稱。我將如何優化它?

+0

我會加載字典動態地從一個在'example.py'中寫入文件並寫入這個文件。你看過像[cPickle](https://pymotw.com/2/pickle/)這樣的東西嗎? – martianwars

+0

這是一個x-y問題的好例子:-)。你想知道如何更新Python文件中的字典。但是,如果它必須更新,不應該位於Python文件中,而是位於* data *文件中。例如,json模塊在處理字典方面非常出色,同時擁有一種易於手動編輯的格式(使用簡單的文本編輯器)。 –

回答

0

在這種情況下直接更新example.py的字典似乎不是很有必要。我會採用一種稍微不同的方式使用cPickle從文件中讀取數據。

在你example.py文件,使用該片段來讀取數據 -

import cPickle 
with open(r"data.pk", "rb") as input_file: 
    cPickle.load(d, input_file) 

寫入此cPickle文件(從另一個腳本),

import cPickle 
d = { 
    'a': {'b': 5, 'c': 6}, 
    'd': {'e': 7, 'f': 8} 
} 
# Add some logic to dynamically update d 
with open(r"data.pk", "wb") as output_file: 
    cPickle.load(d, output_file) 
+0

動態負載在這裏不應該是一個問題! – Jackie

+0

如果這有助於你,不要忘記接受它作爲正確的答案:) – martianwars

+0

嘿,傑基,這裏的任何更新?這個答案好嗎? – martianwars