【自动化测试必学语言】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() 读到文件末尾,返回⼀个空字符串,即长度为 0

with open('b.txt', encoding='utf-8') as f:
        while True:
                buf = f.readline()
                if len(buf) == 0:
                        break
                else:
                        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) != 0

                        print(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 json

def 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)

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值