python中的IO流使用解读

 更新时间:2023年08月16日 08:58:31   作者:Awen0201  
这篇文章主要介绍了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数据,但是其他对象也是可以的

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python切片用法实例教程

    Python切片用法实例教程

    这篇文章主要介绍了Python切片用法,可以有效的提高Python程序设计的效率,更加灵活的进行Python循环操作,需要的朋友可以参考下
    2014-09-09
  • 判断python字典中key是否存在的两种方法

    判断python字典中key是否存在的两种方法

    这篇文章主要介绍了判断python字典中key是否存在的两种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • python如何将两个txt文件内容合并

    python如何将两个txt文件内容合并

    这篇文章主要为大家详细介绍了python如何将两个txt文件内容合并,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • Python3爬虫中识别图形验证码的实例讲解

    Python3爬虫中识别图形验证码的实例讲解

    在本篇内容里小编给大家分享的是关于Python3爬虫中识别图形验证码的实例讲解内容,需要的朋友们可以学习参考下。
    2020-07-07
  • 懒人必备Python代码之自动发送邮件

    懒人必备Python代码之自动发送邮件

    在传统的工作中,发送会议纪要是一个比较繁琐的任务,需要手动输入邮件内容、收件人、抄送人等信息,每次发送都需要重复操作,不仅费时费力,而且容易出现疏漏和错误。本文就来用Python代码实现这一功能吧
    2023-05-05
  • 关于Python文本生成的Beam Search解码问题

    关于Python文本生成的Beam Search解码问题

    这篇文章主要介绍了Python文本生成的Beam Search解码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Windows下PyCharm安装图文教程

    Windows下PyCharm安装图文教程

    这篇文章主要为大家详细介绍了Windows下PyCharm安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Python中的变量及简单数据类型应用

    Python中的变量及简单数据类型应用

    这篇文章主要介绍了Python中的变量及简单数据类型应用,简单的数据类型包括字符串和数字,更多详细内容,需要的小伙伴可以参考一下
    2022-03-03
  • Python中if __name__ == ''__main__''作用解析

    Python中if __name__ == ''__main__''作用解析

    这篇文章主要介绍了Python中if __name__ == '__main__'作用解析,这断代码在Python中非常常见,它有作用?本文就解析了它的作用,需要的朋友可以参考下
    2015-06-06
  • Python中Toml配置文件的操作详解

    Python中Toml配置文件的操作详解

    TOML是一种用于配置文件的轻量级、易读的数据序列化格式,这篇文章主要为大家详细介绍了python如何对Toml配置文件进行简单操作,感兴趣的小伙伴可以了解下
    2023-09-09

最新评论