Я хотел бы разделить вложенный ключ и значение из dict и записать в текстовый файл. Я попытался использовать следующий код для извлечения вложенных ключей и значений. Но значения ключа перезаписываются последним результатом итерации. Извлеченный результат будет использоваться для входного параметра селена.Сплит множественный вложенный ключ, значения и извлечение в текстовый файл
Ссылка - Split dictionary key and list of values from dict
Пожалуйста, дайте мне знать, чтобы получить мой результат.
ОЖИДАЕМЫЕ TXT ФАЙЛ
[email protected]
step0.url=http://demo.url.net
step0.password=mytester
step0.create-folder-name=demo
step1.url=http://demo.url.net
[email protected]
step1.password=mytester123
step1.select-folder-name=demo124
step1.share-folder-name=demo124
входной файл - список действий, которые будут выполняться на моем проекте.
login url=http://demo.url.net [email protected] password=mytester
create-folder create-folder-name=demo
logout
login url=http://demo.url.net [email protected] 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 [email protected] password=mytester
create-folder create-folder-name=demo select-folder select-folder-name=demo logout
Сгенерированный выходной файл
[email protected]
select-folder-name=demo124
share-folder-name=demo124
create-folder-name=demo
url=http://demo.url.net
password=mytester123
Можете ли вы показать нам, как вы называете эту функцию и какой выход вы получить? Я не понимаю, почему вы используете функцию «extract_value», поэтому укажите пример использования, чтобы выяснить, что именно вы хотите сделать. – Bakuriu
Я обновил вопрос. – raj