Pai到用时方恨少
前言
古人言” 书到用时方恨少“,到我这里成了Pai到用法方恨少呀!
前段时间需要处理csv表格的数据,然后需求很明确定,但到实际落地时遇到各种小问题—语法不熟悉、API参数不对等。只能是边查资料边撸代码,写了几个小时才勉强写出自己想要工作脚本
所以呀:Python这类得提高生产力,提高工作效率的脚本语言还是需要持续学习,经常使用,达到熟得生巧的程序才行呀!
最终的代码大概如下示例
import pandas as pd
import urllib.parse
import json
# python 3
def find404(name):
file_path = '/Users/luo/Downloads/DL1452839_RESULT_154326248.csv'
csv_data = pd.read_csv(file_path, usecols=['reqdata'])
uriMap = {}
for i, j in csv_data.iterrows():
# j[0]为内容,类型是str
json_str = urllib.parse.unquote(j[0])
json_obj = json.loads(json_str)
# json_obj是一个json数组
for value in json_obj:
if 'ret' in value and value['ret'] == '404' and 'scode' in value and value['code'] == 1024:
key = urllib.parse.unquote(value['uri'])
if (key in uriMap):
uriMap[key] = uriMap[key] + 1
else:
uriMap[key] = 1
uri_list = sorted(uriMap.items(), key=lambda x: x[1], reverse=True)
print("接口名, 次数")
for iterm in uri_list:
print(f'{iterm[0]}, {iterm[1]}')
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
find404('PyCharm')
需求说明
从一个表格中筛选某列,然后对列中的每项数据做多次url decode跟数据的二次筛选
表格的列 key为 reqdata,reqdata的内容是一个Json数组且被urlencode后的字符串
Json数组内容简单来说是这样子
[{“code”:12, “ret”:200, “uri”:“fun1”}, {“code”:1024, “ret”:401, “uri”:“fun2”}]
我们需要找出code为1024且ret等于401的url,然后做uri维度的次数统计
第一步:用pandas过滤出reqdata列,然后遍历每一项
遍历每一项的先做url decode,然后再转成json数组,再做数组的遍历,找到我们关注的code为1024的且ret为404的
json对象,对该对象的url的值再一次url decode,然后再把decode的值放到一个map中(借助map来对某个key做计数)
第二步:对收集到的map做排序,并输出到终端