python中的IO流

 什么是IO流: 

input output stream , 主要指的是计算机输入和输出的操作;
一般来说是内存与磁盘之间的输入输 出(侠义);
IO流操作是一种持久化操作,是将数据持久化在磁盘上。

Python中操作IO流的方法:

         通过open全局函数 主要作用是打开本地的文件)

        open函数解析:第一个参数:file  (打开的文件的文件名或者路径)

                                  第二个参数: mode  打开的模式( 默认的是字符输入流(r) )   
                                                r:read表示输入流
                                                w:write表示输出流
                                                t:表示字符流
                                                b:表示字节流
                                                a:表示追加输出        
        注意:一定要关流:f.close()       
        

IO流的分类:

1、根据数据流动方向分类:

        (1)输入流·:相对于内存而言,例如从磁盘、投影仪、网络中读取数据。

>>> f = open("aa.txt","r")
>>> f
<_io.TextIOWrapper name='aa.txt' mode='r' encoding='cp936'>
>>> f.read()
'我爱学习,学习使我快乐!'
>>> f.close()

上面的代码:mode = "r" 表示输入流,读取当前路径下名为aa.txt的文档的内容

        (2)输出流:相对于内存而言,例如向磁盘、投影仪、网络等显示设备中写入数据。

>>> f = open("aa.txt",mode="w")
>>> f
<_io.TextIOWrapper name='aa.txt' mode='w' encoding='cp936'>
>>> f.write("阿文今天很开心!OVO")
11
>>> f.close()

上面的代码:mode = "w" 表示输出流,将内容保存在aa.txt的文档之中,并且会覆盖之前的内容;f.write("")之后返回的是写入字符的个数。注意每次结束操作之后都要关流:f.close(),这样才能写入需要写入的东西;也有不关流写入内容的方法:f.flush()。

2、根据数据类型分类:

        字节流:mode = “b” 表示使用字节来操作IO流(如视图、音频、图片可执行文件等);字节流操作较大数据时,不建议一次性读取。

#读取图片视频或者音频等
def copy_file(src,dest):
	f = open(src,"rb")
	f1 = open(dest,"wb")
	f1.write(f.read())
	f.close()
	f1.close()
if __name__ == '__main__':
	copy_file("D:\\PYcharm\\哈哈\\1.jpg","C:\\Users\\QWQ\\Desktop\\1.jpg")

上面的代码:f是输入流,f1是输出流,将f读取的字节流数据写入f1中,实现了将图片1.jpg复制到桌面上的操作。

        字符流:mode = “t” 表示使用字符操作IO流

#读取文档数据
def io_test(url1,url2):
	f1 = open(url1,"rt",encoding='UTF-8')
	f2 = open(url2,"wt",encoding='UTF-8')
	msg = f1.read()
	f2.write(msg)
	f1.close()
	f2.close()

io_test("C:\\Users\\QWQ\\Desktop\\第一天\\a.txt","C:\\Users\\QWQ\\Desktop\\第一天\\b.txt")
上面的代码:将文档a.txt的字符流内容写入文档b.txt之中。
注意的编码格式,如果编码格式不一致,会报错或者乱码,处理数据时转码:encoding='UTF-8'。
注意:
(1)本质 Mode = "r" "w" ------“rt" "wt" --------- t text 字符流; b ------- binary mode, mode = "b" ------- 操作字节数据(图片、音频、视频等)。
(2)字节可以操作任何数据,字符只能操作字符数据。
(3)IO流一定要及时关闭,避免资源的占用以及避免出现异常。
(3)拷贝数据时,为了避免因为目标文件过大而导致电脑死机,应使用read参数来控制每次拷贝数据的多少,也可以使用循环来做。
(5)字节流操作大数据的时候,不建议一次性读取;字符流,我们一般不用考虑内存不够用问题(如500W字约10M左右)。
(6) 出现名字相同的文件进行备份的时候,会覆盖掉原本的内容,可使用参数 a:表示追加输出  ;这样需要保存的数据会保存在原来数据的后面。
编写一个程序:将某个文件备份到需要保存的路径
from os import path
import uuid
def copy_file():
	src = input("请输入源文件的路径:")
	dest = input("请输入你的保存路径:")
	f = open(src,"rb")
	filename = src[src.rfind("\\")+1:]
	random_uuid = uuid.uuid4().hex
	filename = random_uuid + filename
	print(filename)
	f1 = open(path.join(dest,filename),"wb")
	while True:
		#以M单位进行读取
		data = f.read(1024*1024)
		#字符流读到最后会返回""
		if data == b"":
			print("数据读取完成")
			break
		else:
			f1.write(data)
	f.close()
	f1.close()
if __name__ == '__main__':
	copy_file()

对象序列化:

列表、字典、集合和元组都是抽象的概念,需要把对象持久化操作,所以需要序列化;
是把对象这种抽象的概念持久化到磁盘上,换句话说就是将对象转为字节和字符。
pickle(可以将对象转换为字节数据)
dumps ------ 将对象序列化为字节数据
loads ------ 将字节数据反序列化为对象
dump ------ 将对象序列化为字节数据并且保存到 file
load -------- file 字节数据反序列化为对象

json(可以将对象转换为字符数据)

dump ------ 将对象序列化成为字符数据,并且保存到file中
dumps ------ 将对象序列化成为字符数据
load ------ 将一个file对象反序列化为对象
loads------  将一个字符串据反序列化为对象
注意:json这个模块一般用来序列化字典对象,或者转换json数据,但是其他对象也是可以的

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值