【自动化测试】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.png | 7 | ok |
01_candy.png | 8 | just so so |
02_karry.png | 9 | great |
02_sunny.png | 6 | ok |
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
- pandas是python中数据分析核心库,能够快速、灵活的对大量数据进行分析
- 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
- 获取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 |
---|---|---|
性能 | 慢,需要循环 | 快,向量化操作 |
内存 | 占用多 | 占用少 |
功能 | 基本操作 | 数学函数 |
数据类型 | 可以混合 | 通常同类型 |