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

【自动化测试必学语言】python:文件操作(json文件)

目录

文件介绍

文件操作

文件操作的步骤

1.打开文件

2.读或者写文件

写文件

读文件

3.关闭文件

使用 with open 打开文件

按行读取文件内容

json 文件的处理

json 的介绍

json 文件的语法

json 文件的书写

读取 json 文件

练习 

练习2

json 的写入


文件介绍


计算机的文件,就是存储在某种长期储存设备上的一段数据
作用: 将数据长期保存下来,在需要的时候使用
  1. 计算机只认识 二进制(0或1)
  2. 文件中存储的数据都是以二进制(0或1)的形式去存储的
可以根据文件中的二进制内容,能否使用记事本软件将其转换为文字,将文件分为两种: 文本文件和二进制文件
  • 文本文件
    • 能够使用记事本软件打开(能够使用记事本转换为文字)
    • txt,md,py,html,css,js,json
  • 二进制文件
    • 不能使用记事本软件打开的
    • exe,mp3,mp4,jpg,png 

📢 注意:我们操作的基本都是文本文件

文件操作


文件操作的步骤

  1. 打开文件
  2. 读或者写文件
  3. 关闭文件

1.打开文件

打开文件:将文件从磁盘(硬盘)中读取到内存中
语法
open ( file , mode = 'r' , encoding = None )
> 参数 file 是要打开的文件,类型是字符串,文件的路径可以是相对路径,也可以是绝对路径(从根目录开始书写的路径),建议使用相对路径(相对于当前代码文件所在的路径, ./
../ )
> 参数 mode 默认参数(缺省参数), 表示的是打开文件的方式
> r read 只读打开
> w write 只写打开
> a > append 追加打开 在文件的末尾写入内容
> 参数 encoding 编码方式 字和二进制如何进行转换的
> gbk 将⼀个汉字转换为 2 个字节二进制
> utf - 8 常用,将⼀个汉字转换为 3 个字节的二进制
> 返回值:返回的是文件对象,后续对文件的操作,都需要这个对象

2.读或者写文件

写文件

向文件中写入指定的内容
前提 件的打开方式是 w 或者 a
文件对象 . write ' 写入文件的内容 '
# 返回值: 写入文件的字符数, 一般不关注
# 注意 w 方 式打开文件:
  1. 件不存在会直接创建文件
  2. 件存在会覆盖原文件将原文件中的内容清空
# 1. 打开文件
f = open('a.txt', 'w', encoding='utf-8')
# 2. 写文件
f.write('好好学习\n')
f.write('天天向上')
# 3. 关闭文件
f.close()

读文件

将文件中的内容读取出来
前提 文件的打开方式需要是 r
文件对象 . read ( n )
# 参数 n 表示读取多少个字符 ⼀般不写 表示读取全部内容
# 返回值 读取到的文件内容 类型 字符串
# 1. 打开文件
f = open('a.txt', 'r', encoding='utf-8')
# 2. 读文件
buf = f.read()
print(buf) # 目前只是打印读取的内容,可以做其它的事
# 3. 关闭文件
f.close()
# r 方式打开文件,如果文件不存在,代码会报错

3.关闭文件

关闭文件 将文件占用的资源进行清理,同时会保存文件,文件关闭之后,这个文件对象就不能使用了
文件对象 . close ()

使用 with open 打开文件


with open () 打开文件的好处 不用自己去书写关闭文件的代码,会自动进行关闭
with open ( file , mode , encoding = 'utf-8' ) as 变量 :
# 在缩进中去读取或者写入文件
# 缩进中的代码执行结束, 出缩进之后, 件会自动关闭
with open ( 'a.txt' , 'a' , encoding = 'utf-8' ) as f :
f . write ( 'good good study ' )
# a 方 式打开文件,文 件不存在会创建文件,文 件存在, 在文件的末尾写入内容

按行读取文件内容


按行读取文件 ⼀次读取⼀行内容
文件对象 . readline ()

# with open('b.txt', encoding='utf-8') as f:
#         buf = f.readline()         # 111#         print(buf)
#         print(f.readline())         # 222# with open('b.txt', encoding='utf-8') as f:
#         for i in f:         # 按行读取,读到文件末尾结束
#                 print(i, end='')
# read() 和 readline() 读到文件末尾,返回⼀个空字符串,即长度为 0with open('b.txt', encoding='utf-8') as f:while True:buf = f.readline()if len(buf) == 0:breakelse:print(buf, end='')# 在容器中,容器为空,即容器中的数据的个数为 0,表示False,其余情况都是 True
with open('b.txt', encoding='utf-8') as f:while True:buf = f.readline()if buf:         # if len(buf) != 0print(buf)else:break

json 文件的处理


json 文件 也是⼀个文本文件 就可以直接使用 read () write () 方法去操作文件 只是使用这两个方法 不方便 所以 对 json 文件有自己独特的读取和写入的方法
常用在做测试的时候,将测试数据定义为 json 文件格式,使用代码读取 json 文件,即读取测试数据,进行传参(参数化)

json 的介绍

json 基于文本,独立于语言的轻量级的数据交换格式
- 基于文本,是⼀个文本文件,不能包含图片,音视频等
- 独立于语言,不是某个语言特有的,每种编程语言都可以使用的
- 轻量级,相同的数据,和其他格式相比占用的大小较小
- 数据交换格式,后端程序员 给前端的数据 json , html xml)

json 文件的语法

  1. json 文件的后缀是 .json
  2. json 中主要数据类型为 对象({} 类似 Python 中 字典) 和 数组([]类似 Python 中的列表),对象和 数组可以互相嵌套
  3. ⼀个json 文件是⼀个 对象或者数组(即 json 文件的最外层要么是⼀个 {},要么是⼀个 数组 [])
  4. json 中的对象是由键值对组成的,每个数据之间使用逗号隔开,但是最后⼀个数据后边不要写逗号
  5. json 中的字符串必须使用双引号
  6. json 中的其他数据类型
  • 数字类型 ----> int float
  • 字符串 string ---> str
  • 布尔类型 true, false -----> True, False
  • 空类型 null ----> None

json 文件的书写

我叫小明 我今年 18 性别男 爱好:听歌 游戏 购物 吃饭 睡觉 打豆豆 我的居住地址为:国家中国 城市上海
{"name": "⼩明","age": 18,"isMen": true,"like": ["听歌","游戏","购物","吃饭","睡觉","打⾖⾖"],"address": {"country": "中国","city": "上海"}
}

读取 json 文

1. 导包 import json
2. 读打开文件
3. 读文件
json . load ( 件对象 )
# 返回的是 字典(文件中是对象)或者列表(文件中是数组)
# 1. 导⼊ json
import json# 2. 读打开⽂件
with open('info.json', encoding='utf-8') as f:# 3. 读取⽂件# buf = f.read()# print(type(buf), buf)result = json.load(f)print(type(result)) # <class 'dict'># 姓名print(result.get('name'))# 年龄print(result.get('age'))# 城市print(result.get('address').get('city'))

练习 

我叫小明 我今年 18 性别男 爱好:听歌 游戏 购物 吃饭 睡觉 打豆豆 我的居住地址为:国家中国 城市上海
我叫小红 我今年 17 性别女 爱好:听歌 学习 购物,我的居住地址为:国家中国,   城市北京
  •  Info2.json
[{"name": "⼩明","age": 18,"isMen": true,"like": ["听歌","游戏","购物","吃饭","睡觉","打⾖⾖"],"address": {"country": "中国","city": "上海"}
},{"name": "⼩红","age": 17,"isMen": false,"like": ["听歌","购物","学习"],"address": {"country": "中国","city": "北京"}}
]
  • 代码文件
import json
with open('info2.json', encoding='utf-8') as f:info_list = json.load(f)for info in info_list:print(info.get('name'), info.get('age'),info.get('address').get('city'))

练习2

某网站的测试数据如下 data . json 需求 提取 json 文件中的 用户名 密码和预期结果 组成如下格式 : [() , () , ()] ( 动化参数化需要的数据格式 )
[{"desc": "正确的⽤户名密码","username": "admin","password": "123456","expect": "登录成功"},{"desc": "错误的⽤户名","username": "root","password": "123456","expect": "登录失败"},{"desc": "错误的密码","username": "admin","password": "123123","expect": "登录失败"}
]
import jsondef read_data():new_list = []with open('info3.json', encoding='utf-8') as f:data = json.load(f) # 列表# print(data)for i in data: # i 字典# print((i.get('username'),i.get('password'), i.get('expect')))new_list.append((i.get('username'),i.get('password'), i.get('expect')))# print(new_list)return new_list

json 的写入

文件对象 . write ( 字符串 ) 不能直接将 Python 的列表 和字典 作为参数传递
想要将 Python 中的数据类型存为 json 文 需要使用  json 提供的方法 不再使用  write
步骤 :
1. 导包 import json
2. ( w ) 方式打开文件
3. 写入 json . dump ( Python 中的数据类型,文件对象 )
import json
my_list = [('admin', '123456', '登录成功'), ('root','123456', '登录失败'), ('admin','123123', '登录失败')]
with open('info4.json', 'w', encoding='utf-8') as f:# json.dump(my_list, f)# json.dump(my_list, f, ensure_ascii=False) #直接显示中⽂,不以 ASCII 的⽅式显示# 显示缩进# json.dump(my_list, f, ensure_ascii=False,indent=2)json.dump(my_list, f, ensure_ascii=False,indent=4)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Ubuntu22.04系统中安装机器人操作系统ROS
  • 如何确保场外个股期权交易的安全?
  • 公共命名空间:上下文容器
  • 【云原生】高可用集群KEEPALIVED(理论篇)
  • 小程序使用this.animate实现3维动画切换
  • c语言 图片.bmp读写示例
  • 自动化数据采集:Lua爬虫与JSON解析的深度整合
  • 头狼择校小程序
  • PythonStudio 控件使用常用方式(二十一)TTrayIcon
  • 生物制药及化工行业ERP解决方案
  • 汽车免拆诊断案例 | 2010款劳斯莱斯古斯特车中央信息显示屏提示传动系统故障
  • 电动自行车出海黑马Avento独立站拆解(上)丨出海笔记
  • 2024.8.12
  • vue2前端阿里云oss服务端签名直传
  • 非线性RCD负载:电力系统的智能管理
  • [译]Python中的类属性与实例属性的区别
  • 《剑指offer》分解让复杂问题更简单
  • Android Volley源码解析
  • C++类中的特殊成员函数
  • ES6系统学习----从Apollo Client看解构赋值
  • JavaScript对象详解
  • Java方法详解
  • Rancher如何对接Ceph-RBD块存储
  • Spring Cloud Feign的两种使用姿势
  • SQLServer插入数据
  • Transformer-XL: Unleashing the Potential of Attention Models
  • TypeScript迭代器
  • Vue学习第二天
  • 创建一种深思熟虑的文化
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 警报:线上事故之CountDownLatch的威力
  • 排序算法之--选择排序
  • 区块链技术特点之去中心化特性
  • 使用docker-compose进行多节点部署
  • 项目实战-Api的解决方案
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 移动端 h5开发相关内容总结(三)
  • AI算硅基生命吗,为什么?
  • ​比特币大跌的 2 个原因
  • ‌JavaScript 数据类型转换
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #if和#ifdef区别
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (C++20) consteval立即函数
  • (day6) 319. 灯泡开关
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (独孤九剑)--文件系统
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (三)Honghu Cloud云架构一定时调度平台
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (一)RocketMQ初步认识