计算机的⽂件,就是存储在某种⻓期储存设备上的⼀段数据作⽤:将数据⻓期保存下来,在需要的时候使⽤
计算机只认识 二进制(0,1)
文件中存储的数据都是以二进制(0,1)
可以根据⽂件中的⼆进制内容,能否使⽤记事本软件将其转换为⽂字,将⽂件分为两种:⽂本⽂件和⼆进制文件
文本文件
二进制文件
我们操作的基本都是文本文件
文件操作的步骤:
1、打开文件
2、度或者写文件
3、关闭文件
打开⽂件:将⽂件从磁盘(硬盘)中读取到内存中
# 语法:
open(file, mode='r', encoding=None)
> 参数file: 是要打开的⽂件,类型是字符串,文件的路径可以是相对路径,也可以是绝对路径(带盘符的路径,也就是说根目录),建议使用相对路径(相对于当前代码⽂件所在的路径, ./ ../)
> 参数mode:默认参数(缺省参数),表示打开文件的方式
> r: read 只读打开
> w: write 只写打开
> a:append 追加打开, 在文件的末尾写入内容
> 参数 encoding :编码方式,(⽂字和⼆进制如何进⾏转换的)
> gbk: 将⼀个汉字转换为 2 个字节二进制
> utf-8: 常用,将⼀个汉字转换为 3 个字节的二进制
> 返回值:饭后的是文件对象,后续对文件的操作,都需要这个对象
写文件
向⽂件中写⼊指定的内容.
前提:⽂件的打开⽅式是w或者a
文件对象.write( '写入文件的内容')
# 返回值:写入文件的字符数,一般不关注
# 注意w方式打开文件:
1.文件不存在,会直接创建文件
2.文件存在,会覆盖原文件(将原文件中的内容清空)
# 打开文件
f = open('a.txt','w',encoding='utf-8')
# 写文件
f.write('不要焦虑\n')
f.write('平复心情')
# 关闭文件
f.close()
读文件
将⽂件中的内容读取出来
前提:⽂件的打开⽅式需要是 r
文件对象.read(n)
# 参数 n 表示读取多少个字符,一般不写,表示读取全部内容
# 返回值:读取到的文件内容,类型 字符串
# 打开文件
f = open('a.txt','r',encoding='utf-8')
# 读文件
buf = f.read()
print(buf)
# 关闭文件
f.close()
关闭⽂件:将⽂件占⽤的资源进⾏清理,同时会保存⽂件,⽂件关闭之后,这个⽂件对象就不能使⽤了
文件对象.close()
好处就是,最后自行关闭文件,不用手动写 文件对象.close!!
with open('a.txt', encoding='utf-8') as 变量: # mode 默认是 'r'
# 在缩进中去读取或者写⼊⽂件
# 在缩进中去读取或者写⼊⽂件,出缩进之后,文件会自动关闭
with open('a.txt','a',encoding='utf-8') as f:
f.write('good good study')
# a方式打开文件,文件不存在会创建文件,文件存在,在文件的末尾写入内容
按⾏读取⽂件:⼀次读取⼀⾏内容
文件对象.read()
# with open('b.txt',encoding='utf-8') as f:
# buf = f.readline()
# print(buf)
# print(f.readline())
# 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= '')
json⽂件也是⼀个⽂本⽂件,就可以直接使⽤read()和write()⽅法去操作⽂件,只是使⽤这两个⽅法,不⽅便,所以对json⽂件有⾃⼰独特的读取和写⼊的⽅法
常⽤在做测试的时候,将测试数据定义为json⽂件格式,使⽤代码读取json⽂件,即读取测试数据,进⾏传参(参数化)
json基于⽂本,独⽴于语⾔的轻量级的数据交换格式
1、json 文件的后缀是 .json
2、json 中的主要数据类型为 对象({} 类似于Python 的字典)和 数组([ ],类似python 中的列表),对象和数组可以互相嵌套
3、⼀个json⽂件是⼀个对象或者数组(即json⽂件的最外层要么是⼀个{},要么是⼀个数组[])
4、json 中的对象是由 键值对
组成的,每个数据之间使⽤ 逗号隔开,但是最后⼀个数据后边不要写逗号
5、json 中的字符串必须是双引号
6、json中的其他数字类型
数字类型---->intfloat
字符串string—>str
布尔类型true,false----->True,False(python中是大写首字母)
空类型 null ----->None
我叫⼩明,我今年18岁,性别男,爱好听歌,游戏,购物,吃饭,睡觉,打豆豆。我的居住地址为国家中国,城市上海
{
"name": "小明",
"age": 18,
"isMen": true,
"like": [
"听歌",
"游戏",
"购物",
"打豆豆"
],
"address": {
"country": "中国",
"city": "上海"
}
}
1、导包 import json
2、读打开文件
3、读文件
json.load(文件对象)
返回的是 字典 (文件中的对象)或者列表 (文件中的数组)
# 1.导包
import json
# 2、读打开文件
with open('Dome.json', encoding='utf-8') as f:
# 3、读取文件
result = json.load(f)
print(type(result)) #
print(result.get('name'))
print(result.get('age'))
print(result.get('address').get('city'))
练习:
我叫⼩明,我今年18岁,性别男,爱好听歌,游戏,吃饭,睡觉,打⾖⾖,我的居住地址为国家中国,城市上海.我叫⼩红,我今年17岁,性别⼥,爱好听歌,学习,购物我的居住地址为国家中国,城市北京.
json文件:
[
{
"name": "小明",
"age": 18,
"isMan": true,
"like": [
"听歌",
"游戏",
"购物",
"打豆豆"
],
"address": {
"country": "中国",
"city": "上海"
}
},
{
"name": "小红",
"age": 18,
"isMan": false,
"like": [
"听歌",
"学习",
"购物"
],
"address": {
"country": "中国",
"city": "北京"
}
}
]
代码文件:
# 1、导包
import json
# 2、读打开文件
with open("infor2.json",encoding='utf-8') as f:
# 3、读取文件
infor_result = json.load(f)
for infor in infor_result:
print(infor.get('name'),infor.get("age"),infor.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": "登录失败"
}
]
def read_data():
new_list = []
with open("infor3.json",encoding='utf-8') as f:
data = json.load(f)
for i in data:
new_list.append(i.get('username'),i.get('password'),i.get('expect'))
# print(new_list)
return new_list
简单的介绍了下python中文本文件的操作和json文本,json的文本格式重要,要掌握,这篇帖子是为后面自动化测试做铺垫的。