Python io – BytesIO,StringIO

时间:2020-02-23 14:42:50  来源:igfitidea点击:

Python io模块允许我们管理与文件相关的输入和输出操作。
使用IO模块的优点是可用的类和函数使我们能够扩展功能以实现对Unicode数据的写入。

Python IO模块

我们可以使用多种方式使用io模块在Python中执行流和缓冲区操作。
我们将在此处演示许多示例以证明这一点。
让我们开始吧。

Python字节IO

就像我们对变量所做的一样,当我们使用io模块的字节IO操作时,数据可以作为字节保存在内存缓冲区中。

这是一个示例程序来演示这一点:

import io

stream_str = io.BytesIO(b"theitroad Python: \x00\x01")
print(stream_str.getvalue())

Python StringIO

我们甚至还可以使用StringIO,它与BytesIO的用法极为相似。
这是一个示例程序:

import io

data = io.StringIO()
data.write('theitroad: ')
print('Python.', file=data)

print(data.getvalue())

data.close()

让我们看一下该程序的输出:请注意,在使用完缓冲区后,我们甚至关闭了缓冲区。
这有助于节省缓冲区内存,因为它们将数据存储在内存中。

另外,我们使用带有可选参数的print方法来指定变量的IO流,该流与print语句完全兼容。

使用StringIO阅读

将一些数据写入StringIO缓冲区后,我们也可以读取它。
让我们看一下代码片段:

import io

input = io.StringIO('This goes into the read buffer.')
print(input.read())

使用StringIO读取文件

也可以读取文件并以字节为单位通过网络进行流传输。
io模块可用于将媒体文件(如图像)转换为字节。
这是一个示例程序:

import io

file = io.open("whale.png", "rb", buffering = 0)
print(file.read())

io.open()与os.open()

io.open()函数是执行I/O操作的首选方法,因为它是peform文件I/O的高级接口。
它将OS级文件描述符包装在一个对象中,我们可以使用它以Python方式访问文件。

os.open()函数负责较低级别的POSIX系统调用。
它接受基于POSIX的输入参数,并返回代表打开文件的文件描述符。
它不返回文件对象。
返回的值将没有read()或者write()函数。

总体而言,io.open()函数只是对os.open()函数的包装。
os.open()函数也设置了默认配置,例如标志和模式,而io.open()则不设置它,而是取决于传递给它的值。