开始今天的分享之前,请先允许我介绍下以下文章内容的由来。
------1 个来自盆友提的小需求
2020-08-20 09:55:59,好盆友给我发了条微信,内容如下:
通过和盆友的微信交流,我get到了她的想法,知道了她最终想要的数据格式。于是就有了今天的分享内容。
我分4 步去实现了这个来自盆友的小需求~
1
格式化数据
去掉多余行、空格、换行符
import json
origin_result_data = [b'*************************** 1. row ***************************\n',
b'id: 1\n',
b' param_name: enterprise\n',
b'param_value: {"name": "", "abbreviation": "", "description": " EditByHS form APIs", "logo_path": ""}\n',
b'description: \n',
b' level: 1\n',
b'update_time: 1970-01-01 00:00:00.000000\n',
b' parent_id: NULL\n',
b'*************************** 2. row ***************************\n',
b' id: 2\n',
b' param_name: init_password\n',
b'param_value: 0\n',
b'description: \n',
b' level: 1\n',
b'update_time: 0000-00-00 00:00:00.000000\n',
b' parent_id: NULL\n',
b'*************************** 3. row ***************************\n',
b' id: 3\n',
b' param_name: clear_log_info\n',
b'param_value: {"set_time": "2020-08-14", "clear_interval": 0}\n',
b'description: \n',
b' level: 1\n',
b'update_time: 0000-00-00 00:00:00.000000\n',
b' parent_id: NULL\n']
#去除\n、空格字符
s = [x.strip() for x in origin_result_data if x.strip() != '']
for i in s:
if "****" in str(i):
#去除字符串中包含***的字符串,即删除掉每一条数据的第一行
s.remove(i)
2
大列表分割成小列表
将大列表有序分割成小列表
def list_of_groups(list_info, per_list_len):
"""
:param list_info: 列表
:param per_list_len: 每个小列表的长度
:return:
"""
list_of_group = zip(*(iter(list_info),) * per_list_len)
end_list = [list(i) for i in list_of_group] # i is a tuple
count = len(list_info) % per_list_len
end_list.append(list_info[-count:]) if count !=0 else end_list
return end_list
def test_ret():
list_info = s
#将大列表中每7个元素组成一个小列表
ret = list_of_groups(list_info, 7)
return ret
3
列表与字典层层嵌套
大列表中嵌套字典,字典中再次嵌套字典
target_result_data = []
for item in test_ret():
data = {}
data['id'] = str(item[0]).split(": ")[1].split("'")[0]
data['param_name'] = str(item[1]).split(': ')[1].split("'")[0]
if str(item[2]).split(": ")[1].split("'")[0] == '0':
data['param_value'] = 0
else:
data['param_value'] = "{" + str(item[2]).split(": {")[1].split("'")[0]
data['param_value'] = json.loads(data['param_value'])
data['description'] = str(item[3]).split(':')[1].split("'")[0]
data['level'] = str(item[4]).split(': ')[1].split("'")[0]
data['update_time'] = str(item[5]).split(': ')[1].split("'")[0]
data['parent_id'] = str(item[6]).split(': ')[1].split("'")[0]
target_result_data.append(data)
print(target_result_data)
4
满足需求结果输出
输出盆友想要的数据格式结果
target_result_data = [
{'id': '1',
'param_name': 'enterprise',
'param_value': {'name': '', 'abbreviation': '', 'description': ' EditByHS form APIs', 'logo_path': ''},
'description': '',
'level': '1',
'update_time': '1970-01-01 00:00:00.000000',
'parent_id': 'NULL'
},
{'id': '2',
'param_name': 'init_password',
'param_value': 0,
'description': '',
'level': '1',
'update_time': '0000-00-00 00:00:00.000000',
'parent_id': 'NULL'
},
{'id': '3',
'param_name': 'clear_log_info',
'param_value': {'set_time': '2020-08-14', 'clear_interval': 0},
'description': '',
'level': '1',
'update_time': '0000-00-00 00:00:00.000000',
'parent_id': 'NULL'
}
]
结语: 在工作或学习过程中你是否也遇到过类似的关于Python 数据格式转换的问题呢?你又是如何解决的呢? 友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。