Python中IO概述
Python中的io模块是用来处理各种类型的I/O操作流。主要有三种类型的I/O类型:文本I/O(Text I/O),二进制I/O(Binary I/O)和原始I/O(Raw I/O)。它们都是通用类别,每一种都有不同的后备存储。属于这些类别中的任何一个的具体对象称为文件对象,其他常用的术语为流或者类文件对象。
除了它的类别,每一种具体的流对象也具有各种功能:它仅仅允许读,或者仅仅允许写,或者既能读又能写。它也允许任意随机访问(向前或者向后寻找任何位置),或者仅仅顺序访问(例如在套接字或管道中)。
所有的流对于提供给它们的数据的数据类型都很严格。例如,如果用一个二进制流的write()方法写一个字符类型的数据,那么将会触发一个TypeError错误。用文本流的write()方法来写字节对象数据也是一样的,会触发该错误。
Text I/O
Text I/O期望输入和产生的是字符对象。这意味着无论何时,本地存储都是存储字节组(比如在文件中),数据的编码和解码是透明的,特定平台中换行符字符的翻译也是透明的(windows下换行翻译为:\r\n,而linux中为\n,mac中则又不同,但是这些跨平台的换行符Text I\O会自动根据操作系统平台来转换)。
最简单的创造文本流的方法就是用open()函数,指定编码格式是可选的。
f = open("myfile.txt", "r", encoding = "utf-8")
内存中的文本流也可以通过StringIO对象得到:
f = io.StringIO("some initial text data")
文本流的api细节描述在文档中的TextIOBase部分。
Binary I/O
Binary I/O希望输入的是类字节对象,创造的是字节组对象。不会执行编码,解码和换行符转换操作。这种类型的流可以用于各种无文本数据,或者还需要手动控制的正在处理的文本数据时。
最简单的构造二进制流的方法就是用open(),在模式串中加上’b’
f = open("myfile.jpg", "rb")
内存中的二进制流也可以用BytesIO对象来创造:
f = io.BytesIO(b"some initial binary data: \x00\x01")
二进制流api详细的描述细节在文档中的BufferedIOBase部分。
其他库模块可能提供一些额外的方法来创造文本流或二进制流。例如socket.socket.makefile()
Raw I/O
原始I/O(也称为无缓冲I/O)通常用作二进制流和文本流的低级构造块。从用户代码中直接操作原始流的用法很少见。然而,你可以通过用二进制模式打开一个文件并禁用缓存来构造一个原始流:
f = open("myfile,jpg", "rb", buffering = 0)
关于原始流api的具体细节描述在RawIOBase文档部分。
高级模块
io默认缓冲区大小:
一个int类型数据指定了模块的缓冲区I\O类的默认缓冲区大小。如果可以的话,open()直接使用文件的块大小作为缓冲区大小(包含在os.stat()中)
io.open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True. open=None)
这是内置的open()函数的默认形式
In-memory sterams内存中的流
也可以用个字符串或者类字节对象作为文件进行读和写操作。对于字符串StringIO可以被用作一个用文本模式打开的文件一样,BytesIO可以被用作一个用二进制模式打开的文件一样。两者都提供访问的完全的读写功能。
I/O操作的类层次结构
在I/O操作最顶层的类是抽象基类IOBase。它定义了流的基本的接口。但是值得注意的是,IOBase中读取流和写入流是没有分开的。实现该基类时,如果给定的操作没有实现,则可以引发一个UnsupportedOperation错误。
RawIOBase继承自IOBase。它处理的是从流中读取或者向流中写入字节,FileIO是RawIOBase的子类,为文件系统中的文件提供接口。
BufferedIOBase处理原始字节流(RawIOBase)上的缓冲。它的子类有,bufferdWriter,BufferedReader,BufferedRWPair等带缓冲区的流,分别是可读的流,可写的流,既可读又可写的流。BufferedRandow提供了一个带缓冲区的接口给随机访问流。BufferedIOBase的另一个子类,BytesIO是内存中的字节流。
TextIOBase是IOBase的另一个子类,处理文本形式的字节流,并且处理相应的对字符串的编码和解码操作。TextIOWrapper是从TextIOBase中继承而来,是为带缓冲区的原始流提供的带缓冲区的文本接口。最后,StringIO是内存中的文本流。
参数名称不是规范的一部分,只有open()函数中的参数被用作关键字参数。
下图总结了io模块提供的抽象基础类(abstract base classes)
Python中IO概述相关推荐
- python中IO编程中关于StringIO的读写问题
阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量.文章设置为仅粉丝可见,是因为写博客确实花了不少精力.希望互相进步谢谢!! 文章目录 阅读前请看一下:我是一个热衷于记 ...
- python中io.textio_Python文件读写概述(IO操作、文件读写、stringiobytesio、序列化),python,的,小,总结,StringIOBytesIO...
IO操作 在进行文件的读写之前,需要说明几点.首先,运行的程序和读取的数据都会在内存中缓存. 进入到 程序或数据 内存 其次,用python程序进行文件的读写,需要创建一个小工具–文件流,用来处理数据 ...
- python中IO多路复用、协程
一.IO多路复用 IO多路复用:检测多个socket是否已经发生变化(是否已经连接成功/是否已经获取数据)(可读/可写) import socket def get_data(key):client ...
- python中io中的+模式_Python的高级特性,模块和IO操作
今天我们学习Python的高级特性.模块和IO操作,通过学习这些,我们可以更快的了解Python,使用Python. 高级特性中会讲述列表生成式.生成器.和一些高级函数,学习这些方便我们快速的生成列表 ...
- Python中IO流与File对象
IO流: 什么叫做IO stream(input output stream):输入输出流 指的就是内存数据的读入和写出!!!! 广义上来说,IO流指的就是数据到磁盘.到另一电脑间(socket)的都 ...
- python中io.textio_关于python的IO读写的二三事
IO读写内情 关于io读写,可以分为缓存io与直接io两种.而前者缓存io是当前最为常用的一种io机制:即使用缓冲区buffer(内存中的一块地址),来防止对硬件的频繁访问,由此减少读写操作的时间消耗 ...
- python中IO库中StringIO方法和BytesIO方法用法详解
有时候数据读写不一定是文件,也可以在内存中读写.StringIO顾名思义就是在内存中读写str. Python在内存中读写数据,用到的模块是StringIO和BytesIO. getvalue()方法 ...
- Python中IO编程-文件读写
# (1)读文件f = open('/Users/zhoujian/Desktop/zhoujian.txt', 'r') print(f.read()) f.close()print('------ ...
- python中io中的+模式_Python----文件的IO操作
一.文件操作 打开文件 假设我们有一个file.txt文件,内容为: abcdefg jijklmn opqtsr uvwxyz data = open('file.txt',encoding=&qu ...
最新文章
- 怎样设置rotacast插件_百度克星、16倍速看视频,这5个谷歌插件简直太会玩了!...
- vsftp匿名访问目录_vsftp 匿名访问设置设置
- 【51NOD】1486 大大走格子
- TreeView递归系统目录
- linux vi 中s 替换方法
- VS2010/MFC编程入门之前言
- PHP字符串函数hex2bin( 转换十六进制字符串为二进制字符串)
- 常见面试算法题汇总(Android面试)
- 解决最近github网页无法打开问题
- 计算机之父—— 约翰·冯·诺依曼
- OCOD,用于MAX7456和STM32接口电平转换
- java汉字转换拼音,获取汉字串拼音首字母
- 数据结构例16.试设计一个算法, 使得在一个有序的单链表中插入一个元素后仍然有序。
- Android延时执行事件的方法
- 什么是BEPI认证?
- Firefox使用Chrome主题
- 如何学习SLAM(超级全面)
- c语言除法分数,关于两个分数的算数运算
- routeros v6.43.2_配置自签名证书-RouterOS中级教程6
- 程序员专属笑话,累的时候看看放松一下以便继续努力