当前位置: 首页 > news >正文

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做排序,并输出到终端

相关文章:

  • GPIO端口之AFIO的完全映射与部分映射的理解
  • SpringCloud搭建微服务之Zuul网关
  • Python使用Redis计算经纬度距离
  • 可重入函数
  • ib课程北京国际学校哪里有?
  • 宠物保存服务市场现状及未来发展趋势分析
  • Three.js使用rotation旋转模型
  • 超越所有人的成就,牛顿的光芒也无法掩盖的天才数学巨人
  • C++11之智能指针
  • C++ | 高维数组、指针、返回指向数组的指针的函数
  • linux redis hash哈希 增删改查
  • OS | 【二 PV操作】强化阶段 —— 应用题
  • 超分辨率重建DRCN
  • C++ vector容器
  • 进程(fork()详解)
  • canvas 五子棋游戏
  • echarts的各种常用效果展示
  • Fundebug计费标准解释:事件数是如何定义的?
  • JavaScript标准库系列——Math对象和Date对象(二)
  • node学习系列之简单文件上传
  • scala基础语法(二)
  • tweak 支持第三方库
  • Vue.js 移动端适配之 vw 解决方案
  • Vue.js源码(2):初探List Rendering
  • 程序员该如何有效的找工作?
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 关于Java中分层中遇到的一些问题
  • 通过几道题目学习二叉搜索树
  • 硬币翻转问题,区间操作
  • postgresql行列转换函数
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​configparser --- 配置文件解析器​
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转) Face-Resources
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .apk文件,IIS不支持下载解决
  • .gitignore
  • .net 验证控件和javaScript的冲突问题
  • .NET成年了,然后呢?
  • .so文件(linux系统)
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @RequestMapping用法详解
  • @staticmethod和@classmethod的作用与区别
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [20181219]script使用小技巧.txt
  • [Big Data - Kafka] kafka学习笔记:知识点整理
  • [C++]拼图游戏
  • [CCIE历程]CCIE # 20604
  • [CSAWQual 2019]Web_Unagi ---不会编程的崽
  • [Firefly-Linux] RK3568修改控制台DEBUG为普通串口UART
  • [HXPCTF 2021]includer‘s revenge