我想从 dict 中拆分嵌套的键和值并写入文本文件。我尝试了以下代码来提取嵌套的键和值。但是键的值被最新的迭代结果覆盖。提取的结果将用于 selenium 输入参数。
参考 -从 dict 拆分字典键和值列表
请让我知道得到我的结果。
预期的 TXT 文件
step0.username=test@url.net
step0.url=http://demo.url.net
step0.password=mytester
step0.create-folder-name=demo
step1.url=http://demo.url.net
step1.username=test123@url.net
step1.password=mytester123
step1.select-folder-name=demo124
step1.share-folder-name=demo124
输入文件- 要对我的项目执行的操作列表。
login url=http://demo.url.net username=test@url.net password=mytester
create-folder create-folder-name=demo
logout
login url=http://demo.url.net username=test123@url.net password=mytester123
select-folder select-folder-name=demo124
share-folder share-folder-name=demo124
logout
以下代码正在解析输入文件。
def read_file(file_path):
result = defaultdict(dict)
item = count()
with open(file_path) as f:
for line in f:
if not line:
continue
parts = line.split()
result[next(item)][parts[0]] = dict(p.split('=') for p in parts[1:])
return dict(result)
以下代码将嵌套的键和值拆分并存储到文本文件中。
def generate_properties_file(filepath,dict_in):
try:
print "File PATH" , filepath
print "Generating user property file - %s" %(filepath)
with open(filepath,'wb') as f:
for key,value in dict_in.iteritems():
output_result ='\n'+str(key)+'='+str(value)
f.write(output_result)
except IOError:
print "Unable to write the file :%s " %(filepath)
def extract_value(dict_in,dict_out):
for key,value in dict_in.iteritems():
if isinstance(value,dict): #if value as a dictionary
extract_value(value,dict_out)
elif isinstance(value,list): # if value in a list
for i in value:
extract_value(i,dict_out)
else:
dict_out[key] = value
return dict(dict_out)
def get_property(file_path):
lib_dict = {}
results = read_file(file)
myextracted_data = extract_value(results,lib_dict)
generate_properties_file(os.path.abspath('catalog/user.properties'),myextracted_data)
if __name__=='__main__':
file = os.path.abspath('catalog/commands.txt')
get_property(file)
上面的代码可以很好地使用以下命令提要并生成文本属性文件。
login url=http://demo.url.net username=test@url.net password=mytester
create-folder create-folder-name=demo select-folder select-folder-name=demo logout
生成输出文件
username=test123@url.net
select-folder-name=demo124
share-folder-name=demo124
create-folder-name=demo
url=http://demo.url.net
password=mytester123