首页 > 解决方案 > 使用 Python 将字符串转换为字典列表

问题描述

我的代码如下:

try:
    relations = open(file_name, "wb")      
    ftp.retrbinary('RETR {0}'.format(file_name), test)         
    relations.close()  # Closes the local file        
    ftp.quit()  # Closes the ftp connection
    print("FTP Connection quited.")        
except Exception as e:
    print("Error: File {0} could not be downloaded. {1}".format(file_name, str(e)))

并且测试函数如下:

def test(data):
    data_n = json.dumps(data.decode('utf-8'))

    pdb.set_trace()
    pass

我想使用 python 从 ftp 服务器下载文件并在不本地写入的情况下读取它。

在这种情况下testdata_n我得到:

'"CODE;MATCHCODE;\\r\\nK902154;VANHOVEGARAGES;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\\r\\nK902191;CARAVENUESTAR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\\r\\nK902192;CARAVENUESTAR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"'

如何将其转换为字典列表,如下所示:

result = [
    {
        "CODE": "K902154",
        "MATCHCODE": "VANHOVEGARAGES"
    },
    {
        "CODE": "K902191",
        "MATCHCODE": "CARAVENUESTAR"
    },
    {
        "CODE": "K902192",
        "MATCHCODE": "CARAVENUESTAR"
    }
]

标签: python

解决方案


使用str.split和一个简单的迭代。

前任:

s = '"CODE;MATCHCODE;\\r\\nK902154;VANHOVEGARAGES;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\\r\\nK902191;CARAVENUESTAR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\\r\\nK902192;CARAVENUESTAR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"'
result = []
for i, v in enumerate(s.split(r"\r\n")):
    if i == 0:
        keys = v.strip().strip(';"').split(";")    #Get Keys
    else:
        result.append(dict(zip(keys, v.strip().strip(';"').split(";"))))     #Form dict. 

print(result)

输出:

[{'CODE': 'K902154', 'MATCHCODE': 'VANHOVEGARAGES'},
 {'CODE': 'K902191', 'MATCHCODE': 'CARAVENUESTAR'},
 {'CODE': 'K902192', 'MATCHCODE': 'CARAVENUESTAR'}]

推荐阅读