什么是IO流
IO流(Input Output Stream)即输入输出流,指一种将数据读入内存和从内存输出的技术
作用
持久化数据,保证数据不再丢失
例如把数据存入硬盘u盘或者上传到云盘
IO的分类
数据类型
|-- 字符流
|-- 字节流
流的方向
|-- 输入流
|-- 输出流
操作IO流
open(‘文件路径’,‘操作方式’)
操作方式
-> r:只读的方式打开文件,默认方式,用于从文件中读取数据
-> w:只写的方式打开文件,用于向文件中写入数据
-> +:可读可写
-> x:创建文件并只写的方式打开文件,如果文件存在则报错
-> a:只写的方式打开文件,每次打开追加内容,而不覆盖数据
-> t:以文本操作方式打开文件
-> b:以二进制操作方式打开文件
最常用的是r和w,默认带有t,r等同于tr,w等同于tw
如果要操作二进制文件则要带b,即bw,br
以open方式打开文件,在操作完毕后要关闭文件
读入数据
f = open('a.txt','r')
f.read()
f.close()
写入数据
f = open('a.txt','w')
f.write('字符串')
f.close()
with语句块
用with语句块打开文件就不需要再手动关闭文件了
with open("a.txt", "r") as f:
f.read()
# 操作IO流,不用关闭
对象序列化
当需要将列表、字典等非文本数据存入文件里时,就需要将数据先序列化成二进制数据存入,读取时再转化为原来的数据就可以实现对这些数据的存储了
pickle模块(二进制和对象之间的序列化)
|-- dumps(obj) # 将对象序列化成二进制数据
|-- dump(obj,file) #将一个对象序列化并存入文件,文件必须提前打开
|-- loads # 反序列化,将序列化成二进制数据重新转换为对象
|-- load()
json模块(json字符串和对象之间的序列化)
|-- dumps(obj)
|-- dump
|-- loads
|-- load()
缓存
如果将一个特别大的文件(超过内存大小)直接打开会导致电脑蓝屏,因此需要限制文件的读取速度
f = open('a.txt','r')
while True:
a = f.read(1024 * 1024 * 1024) #每次读1GB
if a == '':
break
f.close()