在python3中从文本文件创建嵌套字典

Koushur

我有一个包含数千个这样的块的文本文件。为了处理,我需要将其转换为字典。

文本文件模式

[conn.abc]
domain = abc.com
id = Mike
token = jkjkhjksdhfkjshdfhsd

[conn.def]
domain = efg.com
id = Tom
token = hkjhjksdhfks

[conn.ghe]
domain = ghe.com
id = Jef
token = hkjhadkjhskhfskdj7979

另一个样本数据

New York 
domain = Basiclink.com 
token = eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Im5PbzNaRHJPRFhFSzFqS1doWHNsSFJfS1hFZyIsImtpZCI6Im5PbzNaRHJPRFhFSzFqS1doWHNsSFJfS1hFZyJ9.eyJhdWQiOiJodHRwczovL21zLmNvbS9zbm93 
method = http 
username = [email protected] 

Toronto 
domain = hollywoodlink.com 
token = eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Im5PbzNaRHJPRFhFSzFqS1doWHNsSFJfS1hFZyIsImtpZCI6Im5PbzNaRHJPRFhFSzFqS1doWHNsSFJfS1hFZyJ9.eyJhdWQiOiJodHRwczovL21zLmNvbS9zbm93Zmxha2UvsfdsdcHJvZGJjcy1lYXN0LXVzLTIiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC9lMjliODE 
method = http 
username = [email protected]

想将其转换为以下内容。

d1={conn.abc:{'domain':'abc.com','id': 'Mike',token:'jkjkhjksdhfkjshdfhsd'}
 conn.def:{'domain':'efg.com', 'id': 'Tom',token:'hkjhjksdhfks'}
 conn.ghe:{'domain':'ghe.com', 'id': 'Jef',token:'hkjhadkjhskhfskdj7979'}}

谢谢

乔·芬兹

由于输入文件的数据行数可能会有所不同,因此此代码应该可以工作。

假设:

  1. 每个键(例如:)conn.abc将以方括号开头并以方括号结尾。例子[conn.abc]
  2. 每个内部字典键值将被分隔 =

如果键值可以是[key]key,则使用下面的代码行而不是注释的代码行。

    elif '=' not in line:
    #elif line[0] == '[' and line[-1] == ']':

代码是:

with open('abc.txt', 'r') as f:
    d1 = {}
    for i, line in enumerate(f):
        line = line.strip()
        if line == '': continue
        elif line[0] == '[' and line[-1] == ']':
            if i !=0: d1[dkey]= dtemp
            dkey = line[1:-1]
            dtemp = {}
        else:
            line_key,line_value = line.split('=')
            dtemp[line_key.strip()] = line_value.strip()
    d1[dkey]=dtemp

print (d1)

如果输入文件是:

[conn.abc]
domain = abc.com
id = Mike
token = jkjkhjksdhfkjshdfhsd

[conn.def]
domain = efg.com
id = Tom
dummy = Test
token = hkjhjksdhfks

[conn.ghe]
domain = ghe.com
id = Jef
token = hkjhadkjhskhfskdj7979

输出如下:

{'conn.abc': {'domain': 'abc.com', 'id': 'Mike', 'token': 'jkjkhjksdhfkjshdfhsd'}, 
 'conn.def': {'domain': 'efg.com', 'id': 'Tom', 'dummy': 'Test', 'token': 'hkjhjksdhfks'}, 
 'conn.ghe': {'domain': 'ghe.com', 'id': 'Jef', 'token': 'hkjhadkjhskhfskdj7979'}}

请注意,我在此处添加dummy = Testconn.def. 因此,您的输出将在输出中包含额外的 key:value。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章