ネストされたキーと値を 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
INPUT FILE - プロジェクトで実行するアクションのリスト。
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
OUTPUT ファイルの生成
username=test123@url.net
select-folder-name=demo124
share-folder-name=demo124
create-folder-name=demo
url=http://demo.url.net
password=mytester123