1

ネストされたキーと値を dict から分割し、テキスト ファイルに書き込みたいと思います。ネストされたキーと値を抽出するために、次のコードを試しました。ただし、キーの値は最新の反復結果によって上書きされます。抽出された結果は、セレンの入力パラメーターに使用されます。

参考 - 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
4

2 に答える 2