文件操作
1.数据本地化和数据持久化
通过文件将数据存到硬盘中
2.文件内容操作
基本步骤:打开文件 --> 操作文件(读/写)--> 关闭文件
2.1打开文件
open(file,mode,encoding=None) --以指定方式打开指定文件,并返回被打开的 文件对象
file --需要打开的文件路径,传参时实参为字符串格式,需要用引号括起来
./ --当前文件所在目录(可以省略)
../ --当前文件所在目录的上层目录
mode --表示打开方式,传参时实参为字符串格式,需要用引号括起来
r --默认值,以读的方式打开文件(只能进行读操作)
w --以写的方式打开文件(只能进行写操作),会覆盖原文件内容
a --以写的方式打开文件(只能进行写操作),在原文件内容后追加
rb/br --以读的方式打开文件(只能进行读操作),读出来的内容是二进制数据
wb/bw --以写的方式打开文件(只能进行写操作),将二进制数据写入文件中
+ --以读写的方式打开
encoding --文本编码方式,传参时实参为字符串格式,需要用引号括起来
utf-8,文本编码只针对文本文件,二进制文件不能设置编码方式
2.2文件操作
2.2.1文件读操作
文件对象.read(字节数) --获取文件中读写位置往后字节数的内容并返回(回车算一个字节),不写字节数参数表示从读写位置开始,读到文件结尾,并且返回(初始读写位置默认在文件开头),结果类型是str
文件对象.seek(字节数) --将读写位置移动到指定字节数处,为0表示文件最开始的位置
文件对象.readline(字节数) --读取当前读写位置所在行后字节数的内容,若字节数为空,则读取读写位置到当前行末的内容并返回,结果类型是str
文件对象.readlines(字节数) --读取读写位置所在行后字节数的内容,结果是list,且list列表的元素是每行内容的字符串格式(加引号)。元素内容不包含读写位置所在行之前的内容。且最后的读写位置所在行的整行内容都会作为元素内容(即使不是在行末)。此时读写位置也会移到下行行首。若不加字节数保留为空则读取读写位置所在行后到文件末尾的内容,结果是list,且list列表的元素是每行内容的字符串格式(加引号),元素内容不包含读写位置所在行之前的内容。
2.2.2文件写操作
文件对象.write(写的内容) --将制定内容写到指定文件中,根据open时mode是w还是a,来决定是覆盖还是追加内容。返回结果是写入的str内容的长度。
文件对象.writelines() --和write差不多呢。。
2.3关闭文件
文件对象.close()
注意:当打开文件的时候如果以读的方式打开一个不存在的文件会报错,以写(w,a)打开一个不存在的文件则不会出现异常,并且会自动创建对应的文件再打开。
2.4二进制文件的操作
2.4.1二进制操作
打开文件时mode加b参数,且encoding不能再写utf-8了
rb --读的时候,获取到的是二进制数据(bytes)
wb --写的时候要求写入内容类型是二进制
普通的文本文件可以通过二进制的形式去打开,影响只是获取到的内容,和写进去的内容的数据类型。
二进制文件只能以二进制形式打开(例如:图片,视频,音频等)
2.4.2二进制数据
一般二进制数据都是通过网络请求获取到,或者通过读取本地的二进制文件来取到。
将字符串转换成二进制:
bytes(字符串,编码方式)
字符串.encode(编码方式)
将二进制转换成字符串:
str(二进制数据,编码方式)
二进制数据.decode(编码方式)
以上编码方式一般都为utf-8
2.5文件上下文
with open(文件路径,打开方式,编码方式) as 文件对象:
操作文件
文件操作完成后,会自动关闭
3.json
3.1json数据
满足json格式的数据就是json数据
json格式:一个json有且只有一个数据,这个数据必须满足是json支持的数据类型
json支持的数据类型:
数字(number) --包含所有的数字(整数和小数),如:3,-4,3.14,3e4
字符串(string) --只能用双引号引起来的字符集,字符也支持转义字符,编码字符,如"abc\n","123as","学习","\u4e00cv"
布尔(bool) --true/false,首字母都小写
数组(array) --相当于python中的列表,如['adc',123,true,[123,'123','asd']]
字典(dictionary) --相当于python中的字典,json字典中key值要求必须是字符串
空值 --null,相当于None
3.2使用json
解析json数据(获取到json数据后,将json中想要的东西解析出来) --做前端开发人员的工作
构造json数据:
在python中有一个内置库,专门负责json数据的处理:json库(import json)
- 将json数据转换为python:
json数据 python数据
number int/float
string str,可能会出现将双引号变单引号
bool bool,true->True,false ->False
array list
dictionary dict
空 null->None
json.loads(字符串,encoding='utf-8') --解析json数据,返回json对应的python数据
字符串要求:字符串中内容本身就是一个json数据(去掉引号后,本身就是一个json数据)
- python转json
python数据 json数据
int/float number
bool bool,True -> true,False-> false
str string,将单引号变为双引号
list/tuple array
dict dictionary
空 None->null
json.dumps(python数据) -->将python数据转换为对应的json数据字符串,结果是字符串。
- json文件操作
json.load(文件对象) --将文件对象中文件内容转换成python数据,文件内容必须是json数据
json.dump(python数据,文件对象) --将python数据转换成json字符串再写入指定文件中
4.应用
- 数据怎么本地化
数据保存在本地文件中一份
每次需要用到这个数据的时候,不是直接给值,而是从本地文件中读取他的值
数据修改完后,要将最新的数据保存在本地文件中
- 什么时候用到json文件
需要持久化的数据是字典,列表,元祖