class io.IOBase
这个类是所有I/O类的抽象基类,作用于字节流。没有公共的构造函数。
该类为许多方法提供了空的抽象的实现,派生类可以有选择的进行覆盖实现。默认的实现代表一个不能读取,写入和查询的文件。
IOBase甚至没有声明read(),readinto()或者write()函数,因为它们的签名有所不同。实现和客户端应该考虑这些方法的一部分接口。当然,当不支持的操作被调用时,实现可能引发ValueError(或者UnsupportedOperation)
用于从文件中读取或向文件中写入的二进制数据的最基本类型是字节。其他的类字节对象也是可以接受的。在某些例子中,如readinto(),可写对象比如bytearray是必需的。Text I/O类操作的是str数据(字符串)
请注意,在关闭的流上调用任何方法(甚至查询)是不允许的,未定义的。实现时可能会引发ValueError错误,在这种情况下。
IOBase(以及它的子类)支持迭代器协议,意味着一个IOBase对象可以通过生成器迭代每一行流中数据。行在二进制流(每一行数据是字节)和文本流(每一行数据时字符串)中的定义是不同的。请参考readLine()函数。
IOBase是一个上下文管理器,所以也支持with语句。在这个例子中,文件在with语句块执行完成后被关闭,即使错误发生也会关闭文件。
with open('spam.txt', 'w') as file:
file.write('spam and eggs')
IOBase提供的数据属性和方法有:
close()
刷新和关闭流。如果问价早已关闭那么这个方法的操作是无效的。一旦文件关闭,任何在文件上的操作
都会引发ValueError错误。
closed
返回正确,如果流关闭了。
fileno()
返回流的底层文件描述符,如果该文件描述符存在的话。如果该I/O对象没有使用文件描述符,则会引发OSError
错误。
flush()
刷新写缓冲区,这个操作对于只读流和非阻塞流不起作用。
isatty()
返回True,如果流是可交互的(例如连接到终端或者tty设备)
readable()
返回True如果流是可读的,返回False,如果流不可读,并且引发OSError错误。
readline(size=-1)
从流中读取并返回一行。如果size变量指定了,则表示能读取的最大字节数。
二进制文件的一行总是以b'\n'结束,对于文本文件,open()函数的newline参数可以用于指定行终止符。
readlines(hint=-1)
从流中读取所有行数据。hint可以被指定,用来控制将被读取的行数:如果总的行数大于hint数,则只会读取
hint行,不会读取更多的行。
请注意,已经可以直接迭代文件对象来读取文件中的行数据:而不用调用file.readlines()函数。
seek(offset[, whence])
通过设定偏移量来改变流中的当前游标。偏移量是相对于由whence指定的位置进行解释的,即从whence位置,偏移
offset。whence的默认值是SEEK_SET。whence的可能值为:
SEEK_SET or 0 -流的开始处(默认);偏移量应该是0或者正数
SEEK_CUR or 1 -流的当前位置;偏移量可以是负数,当然0和正数肯定是可以的
SEEK_END or 2 -流的结尾处;偏移量通常是负数
返回的是新的绝对位置
seekable()
返回True,如果流支持随机访问。如果返回错误,那么seek(),tell()和truncate()函数被调用时会引发OSError
tell()
返回流中游标的当前位置
truncate(size=None)
将流调整为指定的大小,单位为字节(如果没有给出size值,则调整游标的当前位置)。流中的游标位置不会改变。
此调整操作可以扩展或者减少当前文件的大小。在扩展情况下,新文件区的内容取决于平台(在大多数平台中,多出的字节组
使用0来进行填充)。返回的值是新的文件大小。
writable()
返回True,如果流是可写的。如果返回False,write()和truncate()操作会引发OSError操作
writelines(lines)
将多行数据列表写入到流中。不会自动添加行分隔符,因此提供的每一条行数据的最后通常都有行分隔符(即给的行数据
本身在每一行后面有行分隔符)。
__del__()
用来销毁对象的。IOBase提供了这个方法的一种默认实现,这个实现中调用该实例的close()方法。