十六、文件
16.1、文件介绍
计算机的文件 就是存储在某种长期储存设备上的一段数据
作用:将数据长期保存下来,在需要的时候使用
1.计算机只认识 二进制(0 1)
2.文件中存储的数据都是以二进制(0 1)的形式去存储
可以根据 文件中的二进制内容,能否使用记事本软件 将其转换为文字,
将文件分为两种:文本文件和二进制文件
-
文本文件
-
能够使用记事本软件打开(能够使用记事本转换为文字)
-
txt md py html css js json
-
-
二进制文件
-
不能使用记事本软件打开的
-
exe mp3 mp4 jpg png
-
16.2、文件操作
文件操作步骤:
1.打开文件
2.读或写文件
3.关闭文件
1.打开文件
打开文件:将文件从磁盘(硬盘),读取到内存中
语法:
open(file,mode = 'r',encoding = None): # known special case of open
参数 file: 是要打开的文件,类型是字符串,文件的路径 可以是先对路径,
也可以是绝对路径,建议使用相对路径(./ ../)
参数 mode:默认参数(缺省参数),标志的是打开文件的方式
> r:read 只读 打开
> w:write 只写 打开
> a append 追加打开方式,在文件的末尾写入内容
参数 encoding:编码方式(文字和二进制如何而进行转换)
>gbk :将一个饿汉子转换为3个字节的二进制
> utf-8 :常用将一个汉字转换为3个字节的二进制
返回值 : 返回的是 文件对象,后续对文件的操作,都需要这个对象
2.读或写文件
写文件
向文件当中写入指定内容
前提:文件打开方式是w或者a
文件对象.write('写入文件内容')
# 返回值 :写入文件的字符数,一般不关注
# 注意w方式打开文件:
1.文件不存在,会直接创建文件
2.文件存在,会直接覆盖原文件
# 1 打开文件
f = open('a.txt','w',encoding = 'utf-8')
# 2 写文件
f.write('好好学习')
# 3 关闭文件
f.close()
读文件
将文件中的内容读取出来
前提:文件的的撒开方式需要是r
文件对象.read(n)
# 参数n表示读取多少个字符,一般不写,表示读取全部内容
# 返回值: 读取到的文件内容,类型 字符串
# 打开文件、
f = open ('a.txt','r',encoding = 'utf-8')
# 读文件
buf = f.read()
print(buf)
# 关闭文件
f.close()
# r 方式打开文件,如果文件不存在,代码会报错
3.关闭文件
关闭文件:将文件占用的资源进行清理,同时会保存文件,文件关闭之后,这个文件对象就不能使用了
文件对象.close()
16.3、使用with open 打开文件
with open() 打开文件的好处:不用自己书写关闭文件的代码,会自动进行关闭
with open(file,mode,encoding='utf-8') as 变量:
# 在缩进中读取或者写入文件
# 缩进中的代码执行结束,出缩进之后,文件会自动关闭
注意 a 方式打开文件:
文件不存在会创建文件
文件存在,在文件末尾写入内容
with open ('a.txt','a',encoding = 'utf-8') as f:
f.write('good good study')
16.4、按行读取文件内容
按行读取文件:一次读取一行内容
文件对象.redline()
# with open('b.txt',encoding = 'utf-8') as f:
# buf = f.readline()
# print(buf) # 111
# print(buf) # 111
# print(f.readline()) # 222
# 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='')
with open ('b.txt',encoding = 'utf-8') as f:
while True:
buf= f.readline()
if buf: # if len(buf) != 0 #在容器中,容器为空,即容器中的数据的个数为0,表示False, 其余情况都是True
print(buf)
else:
break
十七、json文件处理
json文件 也是一个文本文件 就可以直接使用 read() 和 write() 方法去操作文件,只是使用这俩个方法不方便,所以对json文件有自己独特的读取和写入方法
常用在 在测试时候 将测试数据定义为json文件格式,使用 代码读取json 文件,即读取测试数据,进行传参(参数化)
17.1、json介绍
基于文本,独立于语言的轻量级的数据交换格式
-基于文本 是一个纯文本文件,
-独立于语言,不是某个语言特有的
-轻量级,相同的数据,和其他格式相比,占用较小
-数据交换格式 后端程序员 给前端的数据(json html xml)
17.2、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
17.3、json 文件的书写
我叫小明,今年18 岁 ,性别男,爱好 听歌,游戏,购物,吃饭,睡觉,我的居住地址为国家,城市 上海
新建->file->文件名.json
{
"name" : "小明",
"age" : 18,
"isMen" : true,
"like" : ["听歌","游戏","购物","吃饭"],
"address": {
"country" : "中国",
"city" : "上海"
}
}
17.4、json文件的读取
1.导包 import json
2.读r方式 打开文件
3.读文件
json.load(文件对象)
# 返回的是 字典(文件中是对象)或者列表(文件中是数组)
# info.json文件
{
"name" : "小明",
"age" : 18,
"isMen" : true,
"like" : ["听歌","游戏","购物","吃饭"],
"address": {
"country" : "中国",
"city" : "上海"
}
}
# 导入json
import json
# 读打开文件
with open("info.json",encoding = 'utf-8') as f:
# 读取文件
# 方法一:
# 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'))
练习info
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'))
17.5、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', '123457', '登录失败')]
with open('info4.json', 'w', encoding='utf-8') as f:
# json.dump(my_list, f)
# info4.json 得到[["admin", "123456", "\u767b\u5f55\u6210\u529f"], ["root", "123456",
# "\u767b\u5f55\u5931\u8d25"], ["admin", "123457", "\u767b\u5f55\u5931\u8d25"]]
# json.dump(my_list, f, ensure_ascii=False) # 直接显示中文,不以ASCII的方式显示
# info4.json输出:[["admin", "123456", "登录成功"],
# ["root", "123456", "登录失败"], ["admin", "123457", "登录失败"]]
json.dump(my_list, f, ensure_ascii=False, indent=2) # 显示缩进2格