python中的IO流及其对象序列化

IO流input output stream的缩写

侠义:常见的IO操作是指内存与磁盘之间的输入和输出的操作

io流的操作是一种持久化操作。将数据持久化到磁盘上

open全局函数:

第一个参数file:代表的是打开或者操作的文件的文件名或者路径

第二个参数mode:指的是打开的模式(默认是”r"表示字符输入流)

>>> from os import path
>>> path.abspath(".")
'D:\\pythonfile'
>>> open("a.txt")
<_io.TextIOWrapper name='a.txt' mode='r' encoding='cp936'>
>>> f.close()
>>> f = open("b.txt","r")
>>> f.read()
'哈哈哈哈哈哈哈哈哈哈'
>>> f.read()
''
>>> f.close()

流的分类

流动方向(站在内存角度) 输入流 输出流

数据保存在磁盘上是输出流

根据数据类型

字节流 字符流

字符流

>>> f = open("b.txt","w")
>>> f.write("heiheiheii")
10
>>> f.close()
>>> f = open("a.txt","w")
>>> f.write("xixixixixixiix")
14
>>> f.flush()
>>> f.write("xixixixixixiixkjvjjvk")
21
>>> f.flush()#刷新,将写的放进

流关闭会覆盖

如何解决这个问题??????????????

>>> f = open("b.txt",mode="a")
>>> f.write("喜喜喜喜喜喜")
6
>>> f.close()

本质上mode=”rt""wt"-----t指的是text字符流

>>> f = open("b.txt",mode="rt")
>>> f.read()
'哈哈哈哈哈嘿嘿嘿哈哈哈哈哈嘿嘿嘿kclk'
>>> f.close()
>>> f = open("b.txt",mode="at")
>>> f.write("哈哈哈哈哈嘿嘿嘿kclkhhhjjj")
18
>>> f.close()

字节流

b----binary

视频,图片。音频可执行文件的是二进制数据

mode=“b”

>>> f = open("b.jpg",mode="r")
>>> f.read()#报错
>>> f = open("b.jpg",mode="rb")
>>> f.read()

图片备份!!!!!!!!!!!!

>>> f = open("a.jpg",mode="rb")
>>> ff = open("b.jpg",mode="wb")
>>> ff.write(f.read())
9865
>>> f.close()
>>> ff.close()

注意:字节流操作大数据不建议一次读取!

字节可以操作任何数据 ,字符只能操作字符

>>> ff = open("b.txt",mode="rb")
>>> ff.read()
b'\xb9\xfe\xb9\xfe\xb9\xfe\xb9\xfe\xb9\xfe\xba\xd9\xba\xd9\xba\xd9\xb9\xfe\xb9\xfe\xb9\xfe\xb9\xfe\xb9\xfe\xba\xd9\xba\xd9\xba\xd9kclk\xb9\xfe\xb9\xfe\xb9\xfe\xb9\xfe\xb9\xfe\xba\xd9\xba\xd9\xba\xd9kclkhhhjjj'
>>> ff = open("a.jpg",mode="rt")
>>> ff.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequenc

对象序列化

对象?:容器(列表,元组,集合,字典)

如果想要将对象支持化,保存在磁盘上,就需要对象序列化

对象序列化:将内存像对象这种抽象化的概率转换为真正的字符或者字节数存储在磁盘上

pickle模块

对象序列化为字节数据

>>> import pickle
>>> ls =[1.2,3,4,5,6]
>>> pickle.dumps(ls)
b'\x80\x04\x95\x16\x00\x00\x00\x00\x00\x00\x00]\x94(G?\xf3333333K\x03K\x04K\x05K\x06e.'
>>> data = pickle.dumps(ls)
>>> data
b'\x80\x04\x95\x16\x00\x00\x00\x00\x00\x00\x00]\x94(G?\xf3333333K\x03K\x04K\x05K\x06e.'
>>> f = open("D:\\pythonfile\\c.dat","wb")
>>> f.write(data)
33
>>> f.close()

loads-------将字节数据反序化为对象

>>> show = f.read()
>>> show
b'\x80\x04\x95\x16\x00\x00\x00\x00\x00\x00\x00]\x94(G?\xf3333333K\x03K\x04K\x05K\x06e.'
>>> pickle.loads(show)
[1.2, 3, 4, 5, 6]
>>> ll = pickle.loads(show)
>>> ll
[1.2, 3, 4, 5, 6]
>>> type(ll)
<class 'list'>

dump------将对象序列化为字节数据,并且保存在文件中

>>> pickle.dump(ls,open("D:\\pythonfile\\b.txt","wb"))

load-----将file反序列为对象

>>> pickle.load(open("D:\\pythonfile\\b.txt","rb"))
[1.2, 3, 4, 5, 6]
>>>

json模块

将对象序列化为字符数据

>>> d = {"username":"lili","age":18}
>>> import json
>>> json.dumps(d)
'{"username": "lili", "age": 18}'
>>> ss = json.dumps(d)
>>> type(ss)
<class 'str'>
>>> f = open("D:\\pythonfile\\b.txt","w")
>>> f.write(ss)
31
>>> f.close()

注意:json这个模块一般用来序列化字典对象,并不是只能序列化字典对象(py2中只能操作字典对象)

>>> ls
[1.2, 3, 4, 5, 6]
>>> json.dumps(ls)
'[1.2, 3, 4, 5, 6]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值