文件操作
1,数据持久化(数据本地化)
保存在程序中的数据是保存在运行内存中的,当程序运行结束,内存会自定释放,数据也会消失;所以为了彻底保存数据必须得将数据通过文件存储到硬盘中。
程序中经常用来保存数据的文件:数据库文件(db,sqlite),json文件,plist文件,txt文件,png文件,jpg文件,gif文件等等,,,
2.操作文件(操作文件中的内容)
1)步骤:打开文件 -> 操作文件内容(读操作,写操作)->关闭文件
打开文件:
open(file, mode='r', encoding = None)
说明:
file: -> 字符串;文件在电脑中的地址(文件路径)
路径可以写绝对路径和相对路径
绝对路径:文件在电脑中的完整路径
相对路径:用./代表当前目录(指的是当前操作页面所属的目录)
注意:只有一个./可以省略,如果是../则不可以,它代表当前目录的上一目录,
mode: -> 字符串;文件的打开方式,决定打开文件后能够对文件做什么以及读写的数据类型
'r'/'rt': 以只读的方式打开文件,读出来的是字符串(是默认的,可以省略)
'rb'/'br': 以只读的方式打开文件,读出来的内容是二进制数据(bytes)
'w'/'wt'/'tw' : 以只写的方式打开文件,将字符串写入文件(会先清空原文件,在写入)
'wb'/'bw': 以只写大方式打开文件,将二进制写入文件
'a'/'at'/'ta': 以只写的方式打开文件;将字符串写入文件(不会清空文件,会追加内容在原文件后)
'ab'/'ba' : 以只写的方式打开文件将二进制写入文件,也是追加在后面。
encoding -- 字符串;设置文本文件的编码格式(只针对文本文件有效);一般使用'utf-8'
注意:1.同一个文件读和写的编码方式一样
2.针对文本文件的文本操作有效,所有带‘b’的打开方式都不能设置encoding
3.读写操作
1)读操作
文件对象.read() -- 获取整个文件的内容,以字符串或二进制的形式返回
文件对象.readline() -- 获取文本文件中一行的内容,以字符串或二进制的形式返回
文件对象.seek(0) -- 移动光标(游标)到文件的开头,读完文件或者写完文件后光标就会移动到最后,想要从头开始读,写就需要写这个语句
f = open('./test.txt,'r',encoding='utf-8')
j = f.read()
f.close()
2)写操作
对象.write(内容) -- 将文件‘内容’写入文件中
f = open('./test.txt,'w',encoding='utf-8')
f.write('abc')
f.close()
4.补充 with--open
打开文件在文件作用域中对文件进行操作,离开文件作用域文件自动关闭
语法:
with open('./test.txt,'r',enconding='utf-8') as 文件对象:
5.打开不存在的文件:
1)以读的方式去打开不存在的文件:程序会报错FileNotFoundError
2)以写的方式打开不存在的文件,不会出现异常并且创建一个空的文件。
6.二进制文件的读写
1)普通文本文件:可以使用带t或者带d的读写方式去打开
2)二进制数据文件:视频文件,音频文件,,,,,这些文件只能用带b的方式去打开
7.eval
将序列字符串转换成序列
str1 = '{1:'a',2:'b'}'
dict1 = eval(str1)
print(dict1)
8. JOSON
1)json是一种通用的数据格式;几乎所有的高级语言都支持将json数据转换成当前语句数据,也支持当前语句数据转换成json数据,一般数据接口提供的数据都是json格式的数据
2)json格式
json格式:a.一个json有且只能有一个数据,
b.这个数据必须是json支持的数据类型的数据
json支持的数据类型:
数字类型 - 包括所有的数字,例如:100,12.5,-3.1,3e3(科学计数法310*3)
字符串 - 用双引号引起来的字符集,例如:"abc","a12","123\nabc"
布尔值 - true和false两个值
数组 - 相当于python中的列表:[100,"你好",true,[1,2]]
字典 - 相当于python中的字典,key必须是字符串:{"1":"123","2":true,"3":100}
空值 - null;相当于python中的None,表示空和没有(一般用于字典中)
3)将json数据转换成python数据
a. 对应关系
json python
数字类型 int/float
字符串 str,双引号可能会变成单引号
布尔值 bool,true -- >可能会变成True,False
数组 list
字典 字典
空值 null -> None
b.转换方法(import json)-- json模块是python内置的模块,模块主要提供和json操作相关的函数
json模块中有一个'loads'可以将json格式的数据转换成python对应的数据
loads(字符串) -- 将json格式的字符串转换成python数据
注意:这儿字符串的内容必须是json数据
result = json.loads('"abc"')--里面只能有一个json数据
json.loads('') -- 转换成python数据,且里面不能是空串
res = requests.get('URL')
print(res) -- 在网页上请求得到的是字符串(json数据)
result = json.loads(res.text) -- 将字符串转换成python数据字典
print(result)
for dict1 in result['data']: -- 爬取格式
print(dict1['name']
4)将python数据转换成json数据
a.转换关系
python --> json
int/float 数字
str 字符串,引号都会变成双引号
bool True,False --> true,false
list,tuple 数组 ---------- 元组是不可变的列表(其他的序列不可以直接转,需转换后才行)
dict 字典
None null
b.转换方法
dumps(数据) -- 将括号中的python转换成json格式的字符串
result = json.dumps([100,'abc',True,None]) -- python数据转换成json