一、文件处理
注意点1:
打开文件包含两部分资源:操作系统级打开得文件+应用程序的变量。
在操作完毕一个文件时,必须把该文件的两部分资源一个不落的回收
如下:
f.close() #回收操作系统级打开的文件
del f #回收应用程序级的变量,python 的自动回收机制决定了我们无需再考虑这部操作
也可以用with关键字来管理上下文(防止忘写)
注意点2:
操作文件(f.open(...))是由操作系统打开文件,如果没有指定编码,那么默认编码是操作系统说了算(windows下是GBK,linux下是utf-8)
若要保证不乱码,文件以什么方式存的就以什么方式打开
f = open('txt','r',encoding = 'utf-8')
注意点3:(记住啊)
打开文件的模式:
(默认为文本模式:'t',非文本文件用'b'模式,表示以字节的方式操作,该模式不需要考虑字符编码,图片格式等等;这两种模式和下面搭配使用)
'r':只读模式(默认模式,文件必须存在,不存在则抛出异常)
'w':只写模式 (不存在则创建;存在则清空内容)
'a':只追加写模式(不存在则创建;存在则追加内容)
'x':只写模式(不存在则创建,存在则报错)
其它:
'+':表示可以同时读写某个文件(和上面搭配)
操作文件的方法:
读:
f.read() #读取所有内容,光标移动到文件末尾
f.readline() #读取一行内容,光标移动到第二行首部
f.readlines() #读取每一行内容,存放于列表中
n
写:
f.write('lzl 真帅!\n') #文本模式写,需要自己写换行符
f.write('lzl 真帅!\n'.encode('utf-8')) #b模式下写,..(懒得打字了,都一样)
f.writelines(['lzl\n','真帅!\n']) #向文件中写入一序列的字符串,这一序列字符串可以是由迭代对象产生的,如一个字符串列表
f.readable() #文件是否可写
f.writable() #文件是否可读
f.closed #文件是否关闭
f.encoding #如果文件打开模式为b,则没有该属性
f.flush() #立刻将文件内容从内存刷到硬盘
二、json 模块
补充:
把对象(变量)从内存中变成可存储或传输的过程称之为序列化
序列化原因:
1.持久保存状态
2.跨平台交互数据
注意点1:
json.dumps(): 可以对数据进行编码(序列化)
json.loads(): 对数据进行解码(反序列化)
json.dump():方便文件编码操作
json.load():方便文件解码操作
如下:
import json
with open('a.txt','w') as f:
j = json.dumps('aa')
f.write(j)
#json.dump('aa',f)
with open('a.txt','r') as f:
a = f.read()
print(json.loads(a))
# print(json.load(f))