python 日常工作中常用的库

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的形式有两种:键值对形式,数组形式。

常用方法:

  • loads: 是将string转换为dict
  • dumps: 是将dict转换为string
  • load: 是将里json格式字符串转化为dict,读取文件
  • dump: 是将dict类型转换为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

你可能感兴趣的:(python,python,前端,算法,人工智能)