1.基础os库函数
import os
# 获取当前工作目录
print(os.getcwd())
# 改变当前工作目录
os.chdir('/Users/v_suxuefeng/Desktop/report_tool')
print(os.getcwd())
# 创建目录,如果目录存在就先删掉
if os.path.exists('/Users/v_suxuefeng/Desktop/report_tool/new_directory'):
os.system('rm -rf ' + '/Users/v_suxuefeng/Desktop/report_tool/new_directory')
os.mkdir('new_directory')
# 移动目录,可以重命名文件和目录
os.rename('/Users/v_suxuefeng/Desktop/report_tool/new_directory', '/Users/v_suxuefeng/Desktop/report_tool/123/new_directory')
# 列出目录
print(os.listdir('.'))
# 文件I/O
# 创建文件
with open("new_file.txt", mode='w', encoding='utf-8') as file:
pass
# 写入文件
with open("new_file.txt", "a") as f1:
f1.write("Hello World!")
# 读取文件内容
with open("new_file.txt", "r") as f2:
print(f2.read())
# 进程管理
# 运行shell命令,使用os.system()函数运行shell命令
os.system('ls')
# 使用os.access()函数可以检查指定路径是否具有相应的权限
print(os.access('/Users/v_suxuefeng/Desktop/report_tool/new_file.txt', os.R_OK))
print(os.access('/Users/v_suxuefeng/Desktop/report_tool/new_file.txt', os.W_OK))
print(os.access('/Users/v_suxuefeng/Desktop/report_tool/new_file.txt', os.X_OK))
2.python的configparser库
用来读取配置文件,配置文件的格式可以是:txt, ini, cfg, conf
在自动化测试的时候会用到这个模块,用来封装一些常量,比如:文件路径、IP地址、用户名、密码、常量等,以字典的形式传递。
import os
import configparser
class Conf:
# 1.对象初始化
def __init__(self):
self.conf = configparser.ConfigParser()
self.root_path = os.path.dirname(os.path.abspath(__file__))
self.f = os.path.join(self.root_path + '/config.conf')
self.conf.read(self.f)
# 2.获取所有的sections
def read_sections(self):
print(self.conf.sections())
'''['mysqldb', 'mailinfo', 'login']'''
# 3.获取所有sections对应的options
def read_options(self, s1, s2):
print(self.conf.options(s1))
'''['sql_host', 'sql_port', 'sql_user', 'sql_pass', 'sql_name']'''
print(self.conf.options(s2))
'''['name', 'passwd', 'address']'''
# 4.get()方法获取指定section下的option值
def read_conf(self, m, n):
name = self.conf.get(m, n)
print(f"获取指定section{m}下的option:{name}")
'''获取指定sectionmysqldb下的option:127.0.0.1'''
# 5.items()方法获取指定section下的所有配置信息
def get_items(self, m, n):
print(f"获取指定section{m}下的配置信息:{self.conf.items(m)}")
'''获取指定sectionmysqldb下的配置信息:[('sql_host', '127.0.0.1'), ('sql_port', '8080'), ('sql_user', 'root'), ('sql_pass', '123'), ('sql_name', '游客')]'''
print(f"获取指定section{n}下的配置信息:{self.conf.items(n)}")
'''获取指定sectionmailinfo下的配置信息:[('name', 'suxuefeng'), ('passwd', '456'), ('address', '[email protected]')]'''
# 6.set和write方法,修改某个option的值
def set_option(self, m, n, s):
self.conf.set(m, n, s)
self.conf.write(open(self.f, "w"))
print(f"设置section:{m}下的option:{n}为:{s}")
'''设置section:mysqldb下的option:sql_name为:游客'''
# 7.has_option和has_section方法检查是否存在
def has_s_o(self, s, o):
print(f"检查section:{s} 是否存在:{self.conf.has_section(s)}")
'''检查section:mysqldb 是否存在:True'''
print(f"检查section:{s} 下的option:{o} 是否存在:{self.conf.has_option(s, o)}")
'''检查section:mysqldb 下的option:sql_name 是否存在:True'''
# 8.add_section方法,添加section和option
def add_s_o(self, s, o, v):
if not self.conf.has_section(s):
self.conf.add_section(s)
print(f"添加新的section为{s}")
else:
print(f"新的section{s}已经存在,无需添加")
if not self.conf.has_option(o, v):
self.conf.set(s, o, v)
print(f"要添加的option为:{o}, 值为{v}")
else:
print(f"要添加的option为:{o}, 值为{v}已经存在,无需添加")
self.conf.write(open(self.f, "w"))
'''新的sectionlogin已经存在,无需添加
要添加的option为:name, 值为root'''
# 9.remove_section和remove_option方法,删除section和option
def remove_s_o(self, s, o):
if self.conf.has_section(s):
self.conf.remove_section(s)
print(f"删除section:{s}==OK")
else:
print("要删除的section:{s}不存在,不用删除!")
if self.conf.has_option(s, o):
self.conf.remove_option(s, o)
print(f"删除section: {s} 下的option:{o}==OK")
else:
print(f"要删除section: {s} 下的option:{o}不存在,不用删除")
'''删除section:login==OK
要删除section: login 下的option:name不存在,不用删除'''
if __name__ == '__main__':
eva = Conf()
eva.read_sections()
eva.read_options('mysqldb', 'mailinfo')
eva.read_conf('mysqldb', 'sql_host')
eva.get_items('mysqldb', 'mailinfo')
eva.set_option('mysqldb', 'sql_name', '游客')
eva.has_s_o('mysqldb', 'sql_name')
eva.add_s_o("login", "name", "root")
eva.remove_s_o("login", "name")
3.python的json库
json是一种轻量级的数据交换格式,常用于接口数据传输、序列化、配置文件等,json的形式有两种:键值对形式,数组形式。
常用方法:
import json
with open("1682394206660072.json", 'r') as f_gt:
# load: 是将里json格式字符串转化为dict,读取文件
result = json.load(f_gt)
print(type(result))
print(result)
park = result['preData']['parkingspace']
# dump: 是将dict类型转换为json格式字符串,存入文件
json.dump(park, open('park.json', 'w'))
4.python的Numpy库
在数据分析和机器学习领域被广泛使用。他有以下几个特点:
1、numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算。
2、Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码。
3、有一个强大的N维数组对象Array(一种类似于列表的东西)。
4、实用的线性代数、傅里叶变换和随机数生成函数。
Numpy数组比python列表的性能更好
import time
import numpy as np
# Python列表的方式
t1 = time.time()
a = []
for x in range(100000):
a.append(x**2)
t2 = time.time()
t = t2 - t1
print(t)
# 结果为:0.0383610725402832
t3 = time.time()
b = np.arange(100000)**2
t4 = time.time()
print(t4-t3)
#结果为:0.0008320808410644531
Numpy中常用的函数:
1.np.mean(),返回数组的平均数
2.np.zeros(shape=(nrows,ncols),dtype=np.float),创建一个全部为0的数组
shape:阵列的形状
dtype:生成数组所需的数据类型,int或默认float
3.np.sqrt(),对数组每个元素返回一个非负平方根
4.np.array(),创建一维或多维数组
5.np.linalg.norm(),计算欧式距离,欧式距离是指两个向量之间的距离,
计算公式:d = sqrt(sum((x_i, y_i)^2)),其中x_i和y_i分别表示两个向量中第i个元素,^2表示对元素进行平方计算,sum表示求和,sqrt表示求平方根。
6.np.arange(),在给定的间隔内返回具有一定步长的整数
7.np.argwhere(),查找并返回非零元素的所有下标
a = np.array([0,0,1,1,1,0])
np.argwhere(a)
---------------------
array([[2],[3],[4]], dtype=int64)
8.np.cross() 是numpy库中用于计算两个向量的叉积的函数。它可以接受两个 numpy 数组作为参数,返回一个新的 numpy 数组。
如果您想使用列表作为参数,需要先将它们转换为 numpy 数组
5.python中的cv2库
安装的时候用opencv_python,导入时使用cv2,有强大的图像处理功能
常用的功能有:
img = cv2.imread(”图片路径“)
# circle画圆,img:图片,x和y是坐标,r是画圆半径,color是颜色,1表示空心,负数表示实心
cv2.circle(img, x, y, r, color, 1)
#putText图片上写文本,img:图片,str(text)是文本,tag_pos是坐标,FONT是字体类型,0.3是字体大小,CYAN是字体颜色,1是字体粗细度,2是线类型
text = round(p[''err], 1)
tag_pos = (int(p['x']) + 2, int(p['y']) + 2)
cv2,putText(img, str(text), tag_pos, FONT, 0.3, CYAN, 1, 2)
# 图片保存,保存路径
cv2.imwrite(os.path.join(self.badcase_dir, 'footwalker', self.img_name), img)
6.python中的copy库
深拷贝和浅拷贝
浅拷贝的含义:复制原数据浅层(第一层)的对象到新的内存空间,深层对象不复制(引用共享),原数据浅层数据改变不会引起新数据改变,原数据深层数据改变会引起新数据改变。
深拷贝的含义:对浅层和深层对象都进行复制,并且开辟新的内存地址,新数据和原数据完全独立,原数据的改变不会引起新数据改变。
import copy
a = {'A':1, 'B':['a', 'b']}
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a['A'] = 0
a['C'] = 5
a['B'].append('c')
print('a=', a)
print('b=', b)
print('c=', c)
print('d', d)
'''
a= {'A': 0, 'B': ['a', 'b', 'c'], 'C': 5}
b= {'A': 0, 'B': ['a', 'b', 'c'], 'C': 5}
c= {'A': 1, 'B': ['a', 'b', 'c']}
d {'A': 1, 'B': ['a', 'b']}
'''
7.python中的math模块
math.acos(x):返回x的反余弦,结果范围在0到pi之间
math.pi:圆周率pi
math.sqrt(x):返回x的平方根
math.pow(x,y):返回x的y次幂
math.isnan():判断数字是否是NaN,如果是NaN,则返回True,否则返回False