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使用mediapiple+opencv识别视频人脸的实现

    python使用mediapiple+opencv识别视频人脸的实现

    本文主要介绍了python使用mediapiple+opencv识别视频人脸,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • python图形用户界面tkinter之标签Label的使用说明

    python图形用户界面tkinter之标签Label的使用说明

    这篇文章主要介绍了python图形用户界面tkinter之标签Label的使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 一文掌握6种Python中常用数据库操作及代码

    一文掌握6种Python中常用数据库操作及代码

    在数据处理和管理领域,Python作为一种高效、易用的编程语言,拥有丰富的数据库操作模块,可以轻松实现对关系型数据库的数据操作,本文将介绍六种常见的Python数据库操作模块,需要的可以参考下
    2023-12-12
  • pytorch如何实现多个矩阵拼接

    pytorch如何实现多个矩阵拼接

    这篇文章主要介绍了pytorch如何实现多个矩阵拼接问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Python的类成员变量默认初始值的坑及解决

    Python的类成员变量默认初始值的坑及解决

    这篇文章主要介绍了Python的类成员变量默认初始值的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Python实现准确获取PDF文件中的标题

    Python实现准确获取PDF文件中的标题

    想要在PDF文件中,解析获取全部的标题,是一件比较麻烦的事情,这篇文章将介绍一种较为准确的提取标题的方式,感兴趣的小伙伴可以了解一下
    2024-02-02
  • python 常用日期处理-- datetime 模块的使用

    python 常用日期处理-- datetime 模块的使用

    这篇文章主要介绍了python 如何对日期进行处理,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-09-09
  • 解决python gdal投影坐标系转换的问题

    解决python gdal投影坐标系转换的问题

    今天小编就为大家分享一篇解决python gdal投影坐标系转换的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python 程序员必须掌握的日志记录

    Python 程序员必须掌握的日志记录

    这篇文章主要介绍了Python 日志的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-08-08
  • python 中collections的 deque使用详解

    python 中collections的 deque使用详解

    这篇文章主要介绍了python中collections的deque使用详解,deque是一个双端队列,如果要经常从两端append的数据,选择这个数据结构就比较好了,更多相关内容,需要的小伙伴可以参考下面文章内容
    2022-09-09

最新评论