Python io 模块允许我们管理与文件相关的输入和输出操作。使用 IO 模块的优势在于可用的类和函数使我们能够扩展功能以实现对 Unicode 数据的写入。
Python IO 模块
有许多方法可以使用 io 模块在 Python 中执行流和缓冲区操作。我们将在这里演示很多示例来证明这一点。让我们开始吧。
Python BytesIO
就像我们在变量中所做的那样,当我们使用 io 模块的 Byte IO 操作时,数据可以保存为字节在内存缓冲区中。以下是一个演示此操作的示例程序:
import io
stream_str = io.BytesIO(b"JournalDev Python: \x00\x01")
print(stream_str.getvalue())
让我们看一下此程序的输出:
getvalue()
函数只是从缓冲区中获取值作为字符串。
Python StringIO
我们甚至也可以使用 StringIO
,它在使用上与 BytesIO
非常相似。以下是一个示例程序:
import io
data = io.StringIO()
data.write('JournalDev: ')
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())
让我们看看这个程序的输出:为了运行此程序,我们当前目录中有一个名为whale.png的图像。
io.open() vs os.open()
io.open()
函数是执行 I/O 操作的首选方式,因为它被设计为高级接口,用于执行文件 I/O。它将操作系统级别的文件描述符包装在一个对象中,我们可以以 Python 方式访问该文件。 os.open()
函数处理低级别的 POSIX 系统调用。它接受基于 POSIX 的输入参数,并返回表示已打开文件的文件描述符。它不返回文件对象;返回的值将没有 read()
或 write()
函数。总的来说,io.open()
函数只是 os.open()
函数的一个包装器。 os.open()
函数还设置了默认配置,例如标志和模式,而 io.open()
不会这样做,而是依赖于传递给它的值。
结论
在这节课中,我们学习了Python IO模块的简单操作,以及如何使用BytesIO来管理Unicode字符。然而,如果你正在寻找完整的文件操作,比如删除和复制文件,那么请阅读python读取文件。参考:API文档。
Source:
https://www.digitalocean.com/community/tutorials/python-io-bytesio-stringio