2016-11-18 51 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