一个诞生于和盆友聊天时的Python 数据转换需求
2020-08-20 09:55:59,好盆友给我发了条微信,内容如下:
通过和盆友的微信交流,我get到了她的想法,知道了她最终想要的数据格式。于是就有了今天的分享内容。
我分4 步去实现了这个来自盆友的小需求~
1、格式化数据
去掉多余行、空格、换行符
1 import json 2 origin_result_data = [b'*************************** 1. row ***************************\n', 3 b'id: 1\n', 4 b' param_name: enterprise\n', 5 b'param_value: {"name": "", "abbreviation": "", "description": " EditByHS form APIs", "logo_path": ""}\n', 6 b'description: \n', 7 b' level: 1\n', 8 b'update_time: 1970-01-01 00:00:00.000000\n', 9 b' parent_id: NULL\n', 10 b'*************************** 2. row ***************************\n', 11 b' id: 2\n', 12 b' param_name: init_password\n', 13 b'param_value: 0\n', 14 b'description: \n', 15 b' level: 1\n', 16 b'update_time: 0000-00-00 00:00:00.000000\n', 17 b' parent_id: NULL\n', 18 b'*************************** 3. row ***************************\n', 19 b' id: 3\n', 20 b' param_name: clear_log_info\n', 21 b'param_value: {"set_time": "2020-08-14", "clear_interval": 0}\n', 22 b'description: \n', 23 b' level: 1\n', 24 b'update_time: 0000-00-00 00:00:00.000000\n', 25 b' parent_id: NULL\n'] 26 #去除\n、空格字符 27 s = [x.strip() for x in origin_result_data if x.strip() != ''] 28 for i in s: 29 if "****" in str(i): 30 #去除字符串中包含***的字符串,即删除掉每一条数据的第一行 31 s.remove(i)
2、大列表分割成小列表
将大列表有序分割成小列表
1 def list_of_groups(list_info, per_list_len): 2 """ 3 :param list_info: 列表 4 :param per_list_len: 每个小列表的长度 5 :return: 6 """ 7 list_of_group = zip(*(iter(list_info),) * per_list_len) 8 end_list = [list(i) for i in list_of_group] # i is a tuple 9 count = len(list_info) % per_list_len 10 end_list.append(list_info[-count:]) if count !=0 else end_list 11 return end_list 12 13 14 def test_ret(): 15 list_info = s 16 #将大列表中每7个元素组成一个小列表 17 ret = list_of_groups(list_info, 7) 18 return ret
3、列表与字典层层嵌套
大列表中嵌套字典,字典中再次嵌套字典
1 target_result_data = [] 2 for item in test_ret(): 3 data = {} 4 data['id'] = str(item[0]).split(": ")[1].split("'")[0] 5 data['param_name'] = str(item[1]).split(': ')[1].split("'")[0] 6 if str(item[2]).split(": ")[1].split("'")[0] == '0': 7 data['param_value'] = 0 8 else: 9 data['param_value'] = "{" + str(item[2]).split(": {")[1].split("'")[0] 10 data['param_value'] = json.loads(data['param_value']) 11 data['description'] = str(item[3]).split(':')[1].split("'")[0] 12 data['level'] = str(item[4]).split(': ')[1].split("'")[0] 13 data['update_time'] = str(item[5]).split(': ')[1].split("'")[0] 14 data['parent_id'] = str(item[6]).split(': ')[1].split("'")[0] 15 target_result_data.append(data) 16 print(target_result_data)
4、满足需求结果输出
输出盆友想要的数据格式结果
1 target_result_data = [ 2 {'id': '1', 3 'param_name': 'enterprise', 4 'param_value': {'name': '', 'abbreviation': '', 'description': ' EditByHS form APIs', 'logo_path': ''}, 5 'description': '', 6 'level': '1', 7 'update_time': '1970-01-01 00:00:00.000000', 8 'parent_id': 'NULL' 9 }, 10 11 {'id': '2', 12 'param_name': 'init_password', 13 'param_value': 0, 14 'description': '', 15 'level': '1', 16 'update_time': '0000-00-00 00:00:00.000000', 17 'parent_id': 'NULL' 18 }, 19 20 {'id': '3', 21 'param_name': 'clear_log_info', 22 'param_value': {'set_time': '2020-08-14', 'clear_interval': 0}, 23 'description': '', 24 'level': '1', 25 'update_time': '0000-00-00 00:00:00.000000', 26 'parent_id': 'NULL' 27 } 28 ]
欢迎关注【无量测试之道】公众号,回复【领取资源】,
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、
资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。
备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,让我们一起共同成长!