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

【自动化测试】python基础部分02

掌握基础

  • 1. JSON文件
    • 1.1 dict字典与Json之间的转换
    • 1.2 将Json中的数据取出来存储为csv文件
  • 2. pandas
    • series与datafame数据结构
      • Series
        • 1. 创建Series对象
          • 2. Series对象访问
      • Dataframe
        • 1. Dataframe创建
        • 2. DataFrame对象访问
        • 3. DataFrame修改
    • Pandas数据导入和保存
  • 3. NumPy

1. JSON文件

接口测试的数据类型Json-----语法格式:{"key": value}

注意:
(1) Json 是一种纯字符数据,不属于编程语言
(2) Json 的数据用花括号{}或中括号[]包裹
(3) Json 的键值对的键部分,必须用双引号包裹,单引号不行。末尾不能有逗号

1.1 dict字典与Json之间的转换

userInfo = {"count": 1,"data": [{'name': 'stella','age': 21}]
}
# 字典转json
userInfo_json = json.dumps(userInfo)
print(type(userInfo_json))  # <class 'str'>
print(userInfo_json)
print("__________________")
# json格式的字符串转为字典
userInfo_json = """{"count": 1, "data": [{"name": "stella", "age": 21}]}"""
userInfo = json.loads(userInfo_json)
print(type(userInfo))   # <class 'dict'>
print(userInfo)

单引号:
json.dumps()方法会自动处理:将单引号转换为双引号,会自动处理尾随逗号;将Python的True/False转换为JSON的true/false。确保格式符合JSON规范

# 单引号有dict转换为Json
userInfo = {'k': 1, }
print(json.dumps(userInfo))

!!但是,Json数据带单引号/末尾有逗号,转换会报错

userInfo_json = "{'k': 1}"
print(json.loads(userInfo_json))  # 报错:json.decoder.JSONDecodeError

1.2 将Json中的数据取出来存储为csv文件

变成这样:

主观评分主观评价
01_tom.png7ok
01_candy.png8just so so
02_karry.png9great
02_sunny.png6ok
json = {"01": [{"name": "01_tom.png","主观评分": "7","主观评价": "ok"},{"name": "01_candy.png","主观评分": "8","主观评价": "just so so"}],"02": [{"name": "02_karry.png","主观评分": "9","主观评价": "great"},{"name": "02_sunny.png","主观评分": "6","主观评价": "ok"}]
}if __name__ == "__main__":# 主任务进行时,把上面的json写入csv文件import pandas# 将value 组成一个新的list,列表之间可以相加newList = []# 注意遍历的不是json(字符串),而是json.values()!!for item in json.values():newList = newList + itemprint(newList)# [{'name': '01_tom.png', '主观评分': '7', '主观评价': 'ok'}, {'name': '01_candy.png', '主观评分': '8', '主观评价': 'just so so'},# {'name': '02_karry.png', '主观评分': '9', '主观评价': 'great'}, {'name': '02_sunny.png', '主观评分': '6', '主观评价': 'ok'}]# 正好满足pandas中DataFrame的二维数组pd = pandas.DataFrame(newList)pd.columns = ["", "主观评分", "主观评价"]# 写文件结束,index=False表示不写行号pd.to_csv("example.csv", index=False)

2. pandas

  1. pandas是python中数据分析核心库,能够快速、灵活的对大量数据进行分析
  2. pandas支持多种数据导入,支持数据合并,拆分,基本统计,时间序列分析,透视表等多种操作

series与datafame数据结构

Series

series类:一维(单类)的带索引数据结构

pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
1. 创建Series对象

输出结果:第一列为索引,第二列为Series数据

import pandas as pd
sdata = pd.Series(data=['a', 'b', 'c'], index=[1, 2, 3])
print(sdata)

结果:

1    a
2    b
3    c
dtype: object
2. Series对象访问
  • .iloc[] 按照位置(索引值)访问Series对象元素
print(sdata.iloc[1])    # b
  • 使用标签访问(如例中:[1, 2, 3])
print(sdata[1])     # a
  • 使用loc方式,只能使用标签进行访问
print(sdata.loc[2])     # b
  1. 获取index和value
print(sdata.index.values)   # [1, 2, 3]
print(sdata.values)     # ['a' 'b' 'c']

Dataframe

Dataframe:多种类型的列构成的二维标签数据结构(多列)

pandas.Dataframe(Data=None, index=None, colums=None, dtype=None, copy=False)

data:一维数据或二维数据
index:行标签
columns:列标签

1. Dataframe创建
  • 一行一列
import numpy as np
# numpy创建数组,np.arange(1,4)----[1,2,3]
df_data = pd.DataFrame(data=np.arange(1,4))
print(df_data)

输出

   0
0  1
1  2
2  3
  • 多列
# reshape()改变数组形状---4*4
data = np.arange(16).reshape(4, 4)
df_data2 = pd.DataFrame(data=data)
print(df_data2)

输出

    0   1   2   3
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15
  • 设置index与columns
data = {'c1': [1, 2, 3], 'c2': [4, 5, 6]}
pdata = pd.DataFrame(data=data)
print(pdata)

输出:

   c1  c2
0   1   4
1   2   5
2   3   6
  • 设置列标签
pdata.columns = ['a', 'b']

输出:

   a  b
0  1  4
1  2  5
2  3  6
2. DataFrame对象访问
  • 获取指定列
# 获取指定列
print(pdata['a'])
# 获取多列数据
print(pdata[['a', 'b']])

输出:

0    1
1    2
2    3
Name: a, dtype: int64a  b
0  1  4
1  2  5
2  3  6
a    1
b    4
Name: 0, dtype: int64
  • loc操作
# 获取第一行
print(pdata.loc[0])
# 获取指定行和列的数据
print(pdata.loc[1, ['a', 'b']])

输出:

a    1
b    4
Name: 0, dtype: int64
a    2
b    5
Name: 1, dtype: int64
  • 遍历DataFrame对象
# 获取列索引值
for item in pdata:print(item)     #输出: a (换行) b# 按列遍历
for item in pdata.items():print(item)

输出:

('a', 0    1
1    2
2    3
Name: a, dtype: int64)
('b', 0    4
1    5
2    6
Name: b, dtype: int64)
# 按行遍历
for item in pdata.iterrows():print(item)

输出:

(0, a    1
b    4
Name: 0, dtype: int64)
(1, a    2
b    5
Name: 1, dtype: int64)
(2, a    3
b    6
Name: 2, dtype: int64)
3. DataFrame修改
  • 修改元素
data = {'c1': [1, 2, 3], 'c2': [4, 5, 6]}
pdata1 = pd.DataFrame(data=data)
# 修改c1列的元素全部为0
pdata1['c1'] = 0
# 修改c1列为指定元素
pdata1['c1'] = [0, 1, 2]
print(pdata1)

输出:

   c1  c2
0   0   4
1   1   5
2   2   6
  • DataFrame插入列和行
# 插入列
data = {'c1': [1, 2, 3], 'c2': [4, 5, 6]}
pdata = pd.DataFrame(data=data)
# 插入c3列全为0
pdata['c3'] = 0
print(pdata)

输出:

   c1  c2  c3
0   1   4   0
1   2   5   0
2   3   6   0
# 插入行
data = {'c1': [1, 2, 3], 'c2': [4, 5, 6]}
pdata = pd.DataFrame(data=data)
pdata.loc[3] = [-1, -1] # 注意个数要对应
print(pdata)

输出:

   c1  c2
0   1   4
1   2   5
2   3   6
3  -1  -1

Pandas数据导入和保存

  • 读取csv文件:pd.read_csv()
  • 读取excel文件:pd.read_excel()
  • 读取JSON文件:pd.read_json()
# 读取excel文件
fpath = r'data\test.xlsx'
pdata = pd.read_excel(fpath)
# 读取csv文件
fpath = r'data\GDP.csv'
pdata = pd.read_csv(fpath, encoding='gbk')
  • 保存为csv文件:pdata.to_csv()
  • 保存为excel文件:pdata.to_excel()
  • 保存为JSON格式文件:padata.to_json()

3. NumPy

NumPy(Numerial Python)的核心是创建和高效操作数组,是Python中用于科学计算的基础库

NumPy 和 Pandas 的关系:
NumPy提供基础:Pandas的底层基于NumPy数组
Pandas提供高级功能:数据标签缺失值处理时间序列
协同工作:通常先用NumPy进行数值计算,再用Pandas进行数据处理

  • 创建数组的基本方式
import numpy as np# 从列表创建
arr1 = np.array([1, 2, 3, 4, 5])
# 类似range(),创建0-9的数组
arr2 = np.arange(10)
# 创建2*3的全0数组
arr3 = np.zeros((2, 3), dtype=int)
# 创建2*3的全1数组
arr4 = np.ones((2, 3), dtype=int)
# 创建2*3的随机整数数组
arr5 = np.random.randint(0, 5, size=(2, 3))print("一维数组:", arr1)
print("arange创建数组:", arr2)
print("2*3的全0数组:", arr3)
print("2*3的全1数组:", arr4)
print("2*3的随机整数数组:", arr5)
一维数组: [1 2 3 4 5]
arange创建数组: [0 1 2 3 4 5 6 7 8 9]
2*3的全0数组: [[0 0 0][0 0 0]]
2*3的全1数组: [[1 1 1][1 1 1]]
2*3的随机整数数组: [[1 3 2][2 0 3]]

zeros和ones默认生成浮点数,通过dtype修改为整数
np.zeros(6) 生成六个全零一维数组,ones()同理

  • Numpy数学运算
a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])
# 向量化运算——不需要循环!!
print("相加:", a+b)
print("乘法:", a*b)
print("平方:", a**2)

输出:

相加: [ 6  8 10 12]
乘法: [ 5 12 21 32]
平方: [ 1  4  9 16]
  • 数组操作
# 数组形状操作
arr = np.arange(12)
reshaped = arr.reshape(3, 4)  # 改变形状
print("重塑后的数组:", reshaped)# 数组切片和索引
print("切片:", arr[2:7])
# 获取大于5的元素
print("条件筛选:", arr[arr>5])

输出:

重塑后的数组: [[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]
切片: [2 3 4 5 6]
条件筛选: [ 6  7  8  9 10 11]
  • NumPy 与Pandas关系
    Pandas Series 底层使用NumPy数组
s = pd.Series([1, 2, 3, 4])
print(type(s.values))   # <class 'numpy.ndarray'>
print(s.values)     # [1, 2, 3, 4]
  • Numpy与普通列表
对比普通列表NumPy
性能慢,需要循环快,向量化操作
内存占用多占用少
功能基本操作数学函数
数据类型可以混合通常同类型

文章转载自:

http://i9ayCuSz.jwxmn.cn
http://tdYr3ChK.jwxmn.cn
http://lFYPdE7v.jwxmn.cn
http://ZLWtIkzg.jwxmn.cn
http://23PkTjIp.jwxmn.cn
http://ut2X3f5A.jwxmn.cn
http://1STQiQX0.jwxmn.cn
http://OlqkH43X.jwxmn.cn
http://Ke3nCumd.jwxmn.cn
http://Sr8oz1d7.jwxmn.cn
http://SLUAK6Ee.jwxmn.cn
http://uIJD6tKT.jwxmn.cn
http://6N4HFfBV.jwxmn.cn
http://0uiyxCLi.jwxmn.cn
http://qzJWv7cP.jwxmn.cn
http://jgPrusm4.jwxmn.cn
http://c96xNA63.jwxmn.cn
http://UVoKsU58.jwxmn.cn
http://Iv9Em4ai.jwxmn.cn
http://2otKId6H.jwxmn.cn
http://kY00uZ0Z.jwxmn.cn
http://7DhMojKp.jwxmn.cn
http://Tf0lvchc.jwxmn.cn
http://9AAm90PA.jwxmn.cn
http://NhCanXye.jwxmn.cn
http://qYpTbPCd.jwxmn.cn
http://OvzViv7m.jwxmn.cn
http://KPJle9Hb.jwxmn.cn
http://nozaioVP.jwxmn.cn
http://4VAejAFP.jwxmn.cn
http://www.dtcms.com/a/387990.html

相关文章:

  • 【vscode】——vscode升级之后,无法连接到wsl ubuntu18.04
  • 如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘MySQLdb’ 问题
  • 雅菲奥朗SRE知识墙分享(八):『SRE事件管理的定义与实践』
  • UI 自动化测试中元素被遮挡无法点击的解决方案(Selenium + Python 实战)
  • 消除PCB电磁干扰的方法:从设计到制造的系统性解决方案
  • 图解算法java
  • Kotlin flow详解
  • Class1:Android Studio下载安装教程
  • windwos 下搭建OpenCV开发环境(基于Qt 5.14.2)
  • QSharedMemory + QSystemSemaphore实现进程间通讯的思路、关键点,并附一个完整可运行的Qt Demo(Qt Creator工程)
  • 使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
  • nblot BC260Y-CN ONENET oneJSON上云
  • 硬件驱动——I.MX6ULL裸机启动(6)(i2c相关设置)
  • 9.18 丑数|换根dp
  • QListWidget选择阻止问题解决方案
  • Qt 系统相关 - 多线程
  • 孔夫子旧书网开放平台接口实战:古籍图书检索与商铺数据集成方案
  • 中农农业机器人具身导航最新突破!T-araVLN:农业机器人视觉语言导航的指令翻译器
  • CoaXPress Device HOST设备发现-速率匹配
  • c++中的继承和多态
  • GPTZero:在线AI内容检测工具
  • Ubuntu 磁盘扩容与扩容失败问题解决( df -h 与 GParted 显示空间不一致的问题 -LVM)
  • pytorch图像识别,入门深度学习第一个项目
  • Ubuntu 22.04 使用 Docker 部署 Redis 6.2(带密码与持久化)
  • Termux 安装 Trilium 笔记,全平台同步的好用开源 Markdow 笔记,超大型双链接笔记
  • CVAT工具的详细使用教程(视频标注)
  • 【一周AI资讯】Claude自动抓取网页;美团发布生活Agent;阿里通义发布双模型
  • [视图功能4] 视图共享与外部链接权限管理:安全又灵活的数据展示
  • 20250917在荣品RD-RK3588-MID开发板的Android13系统下使用tinyplay播放wav格式的音频
  • PAT 1013 Battle Over Cities