Python脚本之准备测试环境的用户数据

news2024/9/27 21:28:23

本文为博主原创,未经授权,严禁转载及使用。
本文链接:https://blog.csdn.net/zyooooxie/article/details/127645678

这期是讲述下 我准备测试环境用户数据的经历。

【实际这篇博客推迟发布N个月】

个人博客:https://blog.csdn.net/zyooooxie

【以下所有内容仅为个人项目经历,如有不同,纯属正常】

经历

之前测试环境的用户 我造的时候 user_id是Faker生成的;union_id直接取了 user_id的前15位,有天我测缓存时,发现有问题:union_id出现了重复的情况,所以我清掉所有相关记录后,想着 重新造一批数据:还是用测试环境本就有的用户 + 调整union_id后的值。

就找大佬捞了 100w用户信息,只要2个字段:手机号(明文)+ user_id。因为我这边项目 要用到加密手机号(需要请求一个加密接口),我就写了脚本来跑: https://blog.csdn.net/zyooooxie/article/details/100106284。


# 当晚跑了后,我查看本地日志,

# 第一条是 读取txt用户信息,放入队列后,队列的长度;
19:51:08-wc_performance_test.py-main_1101-line:96-INFO:1000000

# 第二条 是成功加密,已经写入新的txt_1 的长度;
22:38:12-wc_performance_test.py-write_txt-line:210-INFO:998746

# 第三条是没有拿到响应的(我设置 超时时间为0.5s),写入新的txt_2 的长度。
22:38:13-wc_performance_test.py-write_txt-line:210-INFO:1254

# 就 重新跑 失败的这些,第一条是 新读取txt_2 用户信息,放入队列后,队列的长度;
22:47:03-wc_performance_test.py-main_1101-line:96-INFO:1254

# 第二条 到 第五条是 每次起100个线程,跑过程中 队列的长度 逐渐变小,当队列长度小于线程数,我是直接将其扔到 失败list; 
22:47:10-wc_performance_test.py-main_1101-line:96-INFO:354
22:47:10-wc_performance_test.py-main_1101-line:96-INFO:254
22:47:11-wc_performance_test.py-main_1101-line:96-INFO:154
22:47:11-wc_performance_test.py-main_1101-line:96-INFO:54
22:47:11-wc_performance_test.py-main_1101-line:102-INFO:小于线程数:54

# 第六条是 成功加密,已经写入新的txt_3 的长度;
22:47:11-wc_performance_test.py-write_txt-line:210-INFO:994

# 最后一条是 没有拿到响应的(我设置 超时时间为0.5s)+ 小于线程数时的,写入新的txt_4 的长度。
22:47:11-wc_performance_test.py-write_txt-line:210-INFO:260

此时,我将 txt_3的内容 复制 到 txt_1时,复制完了,我看 整个txt_1的行数 超了100w,这不扯呢?明明还有260条没加密的,咋可能就超了?

发现、解决问题

去除 我不小心多复制的记录

Counter类

ABC = [(k, v) for k, v in abc.items() if v != 1]

在这里插入图片描述

去除 重复手机号

ABC = [d[0] for d in ABC]

在这里插入图片描述

去除 非11位手机号

all_data_list_2 = [adl[0] for adl in all_data_list if len(str(adl[0])) != 11]

在这里插入图片描述

去除 异常user-id

all_data_list_3 = [adl[1] for adl in all_data_list if len(adl[1]) <= 15]

在这里插入图片描述

代码

"""
@blog: https://blog.csdn.net/zyooooxie
@qq: 153132336
"""

def test_1101():
    """
    用户信息txt文件 去重
    :return:
    """
    
    all_data_list = read_txt_func(file=r'D:\100W用户4.txt', get_all='True')
    Log.info(len(all_data_list))

    all_data_list_2 = [adl[0] for adl in all_data_list if len(str(adl[0])) != 11]
    Log.info(len(all_data_list_2))
    Log.info(all_data_list_2)

    # all_data_list_2 = dict.fromkeys(all_data_list_2)

    all_data_list_3 = [adl[1] for adl in all_data_list if len(adl[1]) <= 15]
    Log.info(len(all_data_list_3))
    Log.info(all_data_list_3)

    # all_data_list_2 =[(str(adl[0]), *adl[1:]) for adl in all_data_list if adl[0] not in all_data_list_2]
    # Log.info(len(all_data_list_2))

    all_data_list_1 = [adl[-1] for adl in all_data_list if adl[-1].endswith('%3D')]
    Log.info(len(all_data_list_1))

    # abc = Counter(all_data_list_1)

    # ABC = [(k, v) for k, v in abc.items() if v != 1]
    # Log.info(ABC)

    # ABC = [k for k, v in abc.items() if v == 1]
    # ABC = {k: None for k, v in abc.items() if v == 1}

    # all_data_list_2 = [tuple(adl) for adl in all_data_list if adl[0] in ABC]
    # all_data_list_2 = [(str(adl[0]), *adl[1:]) for adl in all_data_list if adl[0] in ABC]
    # Log.info(len(all_data_list_2))

    # ABC = [d[0] for d in ABC]
    #
    # ABC.extend([k for k, v in abc.items() if v == 1])
    # Log.info(len(ABC))
    # ABC = [(str(d[0]), *d[1:]) for d in ABC]
    #
    # write_txt(all_data_list_2)


def write_txt(data: Union[str, list]):
    """
    将加密结果 写入文件(可一条一条写入,也可一次性全部写入)
    :param data:单独一条记录str or  全部记录list
    :return:
    """
    file = r'D:\param_{}.txt'.format(random.randint(1, 99999))

    ls = os.linesep

    with open(file, mode='a', encoding='utf-8') as f:
        if isinstance(data, str):
            # f.write(''.join([data, ls]))
            f.write(''.join([data, '\n']))

        elif isinstance(data, list):
            Log.info(len(data))

            data = [''.join([d, '\n']) if type(d) == str else ''.join([','.join([*d]), '\n']) for d in data]

            f.writelines(data)

反思、最终生成的txt

从没想到 最初的txt文件中的用户信息 会有坑;换个角度想想:同一用户手机号,多条user-id,应该是注销后,再次注册;非11位手机号,是港澳台、海外用户;

最后生成的txt:

在这里插入图片描述

本文链接:https://blog.csdn.net/zyooooxie/article/details/127645678

个人博客 https://blog.csdn.net/zyooooxie

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/371571.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【读书笔记】《深入浅出数据分析》第三章 寻找最大值

目录 一&#xff0c;Excel却是最基础、最高频、最有机会展示的一款数据分析工具二&#xff0c;作为数据工作者&#xff0c;实际工作中&#xff0c;不管用不用的上&#xff0c;至少到达会的水准1&#xff0c;常用函数2&#xff0c;透视表3&#xff0c;可视化4&#xff0c;数据分…

【RabbitMQ笔记04】消息队列RabbitMQ七种模式之发布订阅模式(Publish/Subscribe)

这篇文章&#xff0c;主要介绍消息队列RabbitMQ七种模式之发布订阅模式&#xff08;Publish/Subscribe&#xff09;。 目录 一、发布订阅模式 1.1、Exchange交换机 &#xff08;1&#xff09;什么是Exchange交换机呢&#xff1f;&#xff1f;&#xff1f; &#xff08;2&am…

数据结构与算法----问答2023

1、什么是哈希表&#xff1f;如何解决碰撞&#xff1f; 哈希表&#xff08;Hash Table&#xff09;&#xff0c;也称为散列表&#xff0c;是一种用于实现字典&#xff08;键值对&#xff09;数据结构的数据结构。它将键映射到哈希表中的一个索引&#xff08;桶&#xff09;来保…

从零开始学习iftop流量监控(找出服务器耗费流量最多的ip和端口)

一、iftop是什么iftop是类似于top的实时流量监控工具。作用&#xff1a;监控网卡的实时流量&#xff08;可以指定网段&#xff09;、反向解析IP、显示端口信息等官网&#xff1a;http://www.ex-parrot.com/~pdw/iftop/二、界面说明>代表发送数据&#xff0c;< 代表接收数…

DHCP服务器的使用以及可能出现的问题(图文详细版)

DHCP服务的使用 开始&#xff0d;管理工具&#xff0d;DHCP,打开DHCP服务器选项窗口 新建作用域 在此处输入名称和描述,单击下一步 随机确定一组IP地址的范围,并指定其子网掩码 , 单击下一步 若想要排除某一个/组特定的IP地址,我们可以在此界面输入该IP地址,若没有,则可…

CTFHub | 前端验证

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

django项目部署(腾讯云服务器centos)

基本步骤&#xff1a; 购买腾讯云服务器并配配置好 >> 本地项目依赖收集准备 >> 上传项目等文件到服务器 >> 服务器安装部署软件和python环境 >> 开始部署&#xff08;全局来看就这5个步骤&#xff09; 目录 目录 1. 购买腾讯云服务器并配配置好 …

【算法设计技巧】分治算法

分治算法 用于设计算法的另一种常用技巧为分治算法(divide and conquer)。分治算法由两部分组成&#xff1a; 分(divide)&#xff1a;递归解决较小的问题(当然&#xff0c;基准情况除外)治(conquer)&#xff1a;然后&#xff0c;从子问题的解构建原问题的解。 传统上&#x…

升级日记本-课后程序(JAVA基础案例教程-黑马程序员编著-第七章-课后作业)

【实验7-4】 升级版日记本 【任务介绍】 1.任务描述 本案例要求编写一个模拟日记本的程序&#xff0c;通过在控制台输入指令&#xff0c;实现在本地新建日记本、打开日记本和修改日记本等功能。 用户输入指令1代表“新建日记本”&#xff0c;可以从控制台获取用户输入的日记…

物联网MQTT协议简单介绍

物联网曾被认为是继计算机、互联网之后&#xff0c;信息技术行业的第三次浪潮。随着基础通讯设施的不断完善&#xff0c;尤其是 5G 的出现&#xff0c;进一步降低了万物互联的门槛和成本。物联网本身也是 AI 和区块链应用很好的落地场景之一&#xff0c;各大云服务商也在纷纷上…

mysql8.0-日志

目录 错误日志 错误日志主要记录如下几种日志&#xff1a; 查询日志 测试 慢查询日志 二进制日志 日志格式 日志查看 修改日志格式 二进制日志的删除 二进制日志的还原 错误日志 错误日志是MySQL中最重要的日志之一&#xff0c;它记录了当mysql启动和停止时&#xff0c;…

【Python基础】类

面向对象编程 面向对象编程是最有效的软件编写方法之一。面向对象是一种对现实世界理解和抽象的方法&#xff0c;是计算机编程技术发展到一定阶段后的产物。 面向对象和面向过程的区别 比如我想吃西红柿炒蛋&#xff0c;怎么运用面向过程的方法来解决这个问题呢&#xff1f;…

怕上当?来看这份网络钓鱼和诈骗技术趋势

网络钓鱼和诈骗&#xff1a;当前的欺诈类型 网络钓鱼 钓鱼者可以攻击任何在线服务——银行、社交网络、政府门户网站、在线商店、邮件服务、快递公司等——中的证书。但是&#xff0c;顶级品牌的客户往往面临更大风险&#xff0c;因为相比小品牌&#xff0c;人们更喜欢使用和…

12 个适合做外包项目的开源后台管理系统

1.D2admin 开源地址&#xff1a;https://github.com/d2-projects/d2-admin 文档地址&#xff1a;https://d2.pub/zh/doc/d2-admin/ 效果预览&#xff1a;https://d2.pub/d2-admin/preview/#/index 开源协议&#xff1a;MIT 2.vue-element-admin 开源地址&#xff1a;https…

BACnet协议详解————MS/TP物理层,数据链路层和网络层

文章目录写在前面1 物理层2 数据链路层MSTP的流程如下noteMS/TP帧格式3 网络层写在前面 这周加更一篇&#xff0c;来弥补一下之前落下的进度。简单的说两句&#xff0c;之前讲应用层的时候&#xff0c;只是跟官方的手册来同步一下&#xff0c;但是从个人理解来说&#xff0c;自…

Spring拦截器

SpringMVC提供了拦截器机制&#xff0c;允许运行目标方法之前进行一些拦截工作或者目标方法运行之后进行一下其他相关的处理。自定义的拦截器必须实现HandlerInterceptor接口。preHandle()&#xff1a;这个方法在业务处理器处理请求之前被调用&#xff0c;在该方法中对用户请求…

(周末公众号解读系列)2000字-视觉SLAM综述

参考链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzg2NzUxNTU1OA&mid2247528395&idx1&sn6c9290dd7fd926f11cbaca312fbe99a2&chksmceb84202f9cfcb1410353c805b122e8df2e2b79bd4031ddc5d8678f8b11c356a25f55f488907&scene126&sessionid1677323905…

10 分钟把你的 Web 应用转为桌面端应用

在桌面端应用上&#xff0c;Electron 也早已做大做强&#xff0c;GitHub桌面端、VSCode、Figma、Notion、飞书、剪映、得物都基于此。但最近后起之秀的 Tauri 也引人注目&#xff0c;它解决了 Electron 一个大的痛点——打包产物特别大。 我们知道 Electron 基于谷歌内核 Chro…

C++回顾(二)——const和引用

2.1 C中的const 2.1.1 C与C中const的比较 &#xff08;1&#xff09;C语言中的const C语言中 const修饰的变量是一个 常变量&#xff0c;本质还是变量&#xff0c;有自己的地址空间。 &#xff08;2&#xff09;C中的const 1、C中 const 变量声明的是一个真正的常量&#xff…

24 openEuler管理进程-调度启动进程

文章目录24 openEuler管理进程-调度启动进程24.1 定时运行一批程序&#xff08;at&#xff09;24.1.1 at命令24.1.2 设置时间24.1.3 执行权限24.2 周期性运行一批程序&#xff08;cron&#xff09;24.2.1 运行机制24.2.2 crontab命令24.2.3 crontab文件24.2.4 编辑配置文件操作…