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

【测试开发学习历程】python常用的模块(下)

目录

8、MySQL数据库的操作-pymysql

8.1 连接并操作数据库

9、ini文件的操作-configparser

9.1 模块-configparser

9.2 读取ini文件中的内容

9.3 获取指定建的值

10 json文件操作-json

10.1 json文件的格式或者json数据的格式

10.2 json.load/json.loads

10.3 json.dump/json.dumps

11 yaml 文件操作-pyyaml

11.1 yaml 文件的应用场景

11.2 yaml 文件的格式

11.3 第三方包 - pyyaml

12 sys模块

12.1 处理命令行参数--sys.argv

12.2 退出程序,正常退出时exit(0)--sys.exit(n)

12.3 获取Python解释程序的版本信息

12.4 操作系统平台名称


8、MySQL数据库的操作-pymysql

在做测试过程中,我们可以把测试数据创建在数据库,也可以读取数据库中的数据进行断言操作

python操作数据库之前需要安装数据库驱动

  • 安装方式:pip install pymysql

8.1 连接并操作数据库

import pymysql
# 连接数据库
my_connect = pymysql.connect(host = '',user = '',password = '',database = '',port = ,charset = 'utf8')
# 建立游标:目的是为了缓存数据方便操作(读取数据,遍历表中的所有数据,以便查询)
du_shuju = my_connect.cursor()
#执行sql语句
du_shuju.execute("select * from xxxxx;")
#获取数据
huoqu_data = du_shuju.fetchall()
print(huoqu_data)
#修改表中的数据
du_shuju.execute("update 表名 set 字段名="xxx" where 字段名="yyy";")
#提交数据,修改的数据要进行提交才能修改数据库中的数据,否则修改的只是游标缓存里的数据
my_connect.commit()

注意点:链接数据库的connect类返回的是链接对象,使用链接对象创建游标对象。使用游标对象的execute方法执行sql语句。如果是更新表操作需要使用链接对象commit提交。如果是查询操作需要使用游标的对象的fetchall方法获取查询结果,不需要使用链接对象commit提交,因为查询操作没有更新表。

注意点:如果查询操作获取返回结果,使用游标对象的fetchall方法获取。

fetchall方法是临时的,注意需要使用变量结束fetchall方法的返回结果。

9、ini文件的操作-configparser

什么是ini文件

ini文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式。

ini文件的格式:ini文件由节、键、值组成。

[节点/section]
(键=值)
key=value

例子:setup.ini

[Startup]
RequireOS=Windows 7
RequireMSI=3.1
RequireIE=7.0.0000.0
Require64BitVCRT=1
[Windows 7]
PlatformID=2
MajorVersion=6
MinorVersion=1

9.1 模块-configparser

configparser是第三方模块,主要是用来操作ini文件

安装方式:pip install configparser

9.2 读取ini文件中的内容

使用configparser的Configparser类是实例对象的read方法读取ini文件,需要给read传入ini文件路径。

# 注意点:Configparser类的实例对象的read方法的机制:读取ini文件之后加载到Configparser类的实例对象中的。
# 1:获取ini文件的绝对路径   os.path.dirname(os.path.dirname(__file__))获取当前文件父级的父级目录
ini_path = os.path.dirname(os.path.dirname(__file__)) + '/data_config/config.ini'
# 2: 创建Configparser类的实例对象
conf = configparser.ConfigParser()
# 3: 调用read方法读取ini文件
# read("ini文件的路径"):返回值是读取成功的文件路径。机制:讲读取成功的文件加载到Configparser类型的实例对象中
conf.read(ini_path)

9.3 获取指定建的值

使用configparser的Configparser类是实例对象的get方法获取ini文件下指点键对应的值。

conf = configparser.COnfigparser()
​
conf.get("节点名", "键")

10 json文件操作-json

json是用来存储简单的数据结构和对象的文件。json是一种轻量级的数据交换格式,基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据,用于许多Web应用程序来进行数据交换。

10.1 json文件的格式或者json数据的格式

1.列表方式 [ ]---列表套字典或者列表套列表
[{"id" : 1 ,"name" : "xiaoming"
},{"id" : 2 , "name" : "xiaohong"
},["name", "age", "sex"]
]
​
2.字典方式 { }--字典套字典或者字典套列表
// 前后端分离,推荐后端返回给前端数据格式
{"status" : 0 ,          //执行状态码"msg"    : "SUCCESS",   //说明文字信息,没有为NULL"data"   :[{            //对象中嵌套数组,数组是返回的数据,"id"    : 1 ,"name"  : "xiaohong"},{"id"    : 2,"name"  : "xiaoming"}]
}
​
3.反例
​
{"id" : ox16 } //不合法,数值需要是十进制
{"name" : underfined } //不合法,没有该值
[{"name" : NUll,"school" : function() {console.log("该写法是错误的")}//不合法
}]//json中不能使用自定义函数,或系统内置函数

json模块是python自带的

10.2 json.load/json.loads

  • json.load(文件对象):将json文件转成python对象

  • json.loads(字符串)将字符串数据转成python对象

    # json.laods(字符串)
    json_data = '{"a": {"b": {"c": "数据"}}}'
    result = json.loads(json_data)
    print(type(result))
    ​
    # json.load(文件对象)
    with open(r'json文件路径', mode="r") as f:print(json.load(f))
    ​

10.3 json.dump/json.dumps

  • json.dump(obj, fp):将python对象写入json文件

  • json.dumps(obj):将python对象转成json数据

    # json.dumps(obj)
    dict1 = {"a": {"b": {"c": "数据"}}}
    result = json.dumps(dict1)
    print(type(result))
    ​
    # json.dump(obj, fp)
    dict2 = {"a": {"b": {"c": "数据"}}}
    with open(r"json_data.json", mode="w") as fp:json.dump(dict2, fp)

11 yaml 文件操作-pyyaml

11.1 yaml 文件的应用场景

yaml其实也类似于 json、txt ,它们都属于一种文本格式。在我们的实际工作中, yaml 文件经常作为服务期配置文件来使用。 比如一些定义好的内容,并且不会修改的信息,我们就可以通过定义 yaml 文件,然后通过读取这样的文件,将数据导入到我们的服务中进行使用。

由于 yaml 文件一般作为配置文件使用,所以较少会修改。

11.2 yaml 文件的格式

1、大小写敏感

2、使用缩进表示层级关系

3、缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格

4、不支持Tab键制表符缩进,只使用空格缩进

5、字符后缩进一个空格,如冒号,逗号,短横杆(-)等

6、"—“表示YAML格式,一个文件的开始,用于分隔文件间

7、”#”表示注释 (yaml文件只有行注释)

YAML 支持的数据结构有三种。

  • 对象:键值对的集合,又称为字典(dictionary)

  • 数组:一组按次序排列的值,又称为 列表(list)

  • 纯量(scalars):单个的、不可再分的值

下面对这三种数据结构做详细介绍:

yaml 中的值有以下基本类型:

  • 字符串

  • 整形

  • 浮点型

  • 布尔型

  • null

  • 时间

  • 日期

    # 注释# 1-1、字典  键: 值
    username: xiaoming  # 冒号后面是空格
    password: 123456
    info: 配置  # 中文---不建议使用,有可能会乱码# 1-2、字典嵌套
    NAME_PSW:name: xiaomingpassword: 123456
    ​# 字典套列表
    person:name: 锋声age: 18man: trueaddress:- 深圳- 北京- 广州
    # 字典套列表   
    person1:name: 锋声age: 18man: trueaddress: [深圳, 北京, 广州]# 字典套列表   
    ​
    childs:-name: 锋声age: 10-name: 锋声age: 15# 字典套列表  
    person2:name: 锋声age: 18man: trueaddress: [深圳, 北京, 广州]twoArr:-- 2- 3- 1-- 10- 12- 30
    ​
    # 列表
    - 1
    - 2
    ​
    # 列表嵌套字典
    - user1: aaa
    - user2: bbbage: 10sex: male

11.3 第三方包 - pyyaml

pyyaml 的安装:pip install PyYAML

import yamldef read(path):with open(path, 'r') as file:data = file.read()result = yaml.load(data)# result = yaml.load(data, Loader=yaml.FullLoader)return result

这是因为在 YAML 5.1版本后弃用了yaml.load(file)这个用法,因为觉得很不安全,5.1版本之后就修改了需要指定Loader,通过默认加载器(FullLoader)禁止执行任意函数,该load函数也变得更加安全。所以我们需要将 result = yaml.load(data) 改为 result = yaml.load(data, Loader=yaml.FullLoader)

解决该 TypeError 不单单 只有 yaml.load(data, Loader=yaml.FullLoader) 这一个方法。

以下三选一即可解决该 TypeError

yaml.safe_load(file.read())yaml.load(file.read(), Loader=yaml.FullLoader)yaml.load(file.read(), Loader=yaml.CLoader)

12 sys模块

sys模块是与python解释器交互的一个接口。sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分。

12.1 处理命令行参数--sys.argv

在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称。

12.2 退出程序,正常退出时exit(0)--sys.exit(n)

sys.exit(5)
print(11)
print(11)
print(11)
# 退出python执行程序,下面的代码将不会执行,如同shell中的exit一样。

12.3 获取Python解释程序的版本信息

import sys
print(sys.version)

12.4 操作系统平台名称

import sys
print(sys.platform)

http://www.lryc.cn/news/340848.html

相关文章:

  • GCDAsynSocket之TCP简析
  • 大型网站系统架构演化实例_1.单体架构和垂直架构
  • 2024蓝桥杯——宝石问题
  • three.js加载模型报错,Error: THREE.GLTFLoader: No DRACOLoader instance provided.
  • Spring VS Spring Boot
  • Linux入门(Linux介绍,安装,常用命令,防火墙的设置,注意事项)
  • vue2创建项目的两种方式,配置路由vue-router,引入element-ui
  • MySql 表中的id突然变很大,如何给id重新排序
  • leetcode练习——哈希表
  • 配置交换机 SSH 管理和端口安全
  • 基于SpringBoot+Vue的装饰工程管理系统(源码+文档+包运行)
  • vue3中axios添加请求和响应的拦截器
  • <router-link>出现Error: No match for {“name“:“home“,“params“:{}}
  • prompt 工程整理(未完、持续更新)
  • 兼容性测试用例
  • 阿里云4核8G云服务器价格多少钱?700元1年
  • ts 中的keyof 和typeof
  • 每日一题:买卖股票的最佳时机II
  • nginx安装在linux上
  • ENSP-旁挂式AC
  • 如何获取手机root权限?
  • 2023年全国青少年信息素养大赛(Python)海南赛区复赛真题
  • node.js服务器动态资源处理
  • DNS是TCP还是UDP
  • Redis魔法:解锁高性能缓存的神奇之门(二)
  • ROS2 仿真学习02 Gazebo导入官方示例模型
  • echarts图表按需导入
  • 蓝桥杯(基础题)
  • 【R语言】概率密度图
  • 【学习】软件测试需求分析要从哪些方面入手