我有以下代码:
>>> import io
>>> b = io.BytesIO(b"Hello World")
>>> f = io.TextIOWrapper(b)
>>> f.fileno()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
io.UnsupportedOperation: fileno
但是,当我加载文件时,有一个
fileno
属性:>>> f = open("test.py")
>>> f.fileno()
3
有一种方法可以为第一种情况创建
fileno
属性,在这种情况下,我将BytesIO
对象转换为TextIOWrapper
对象? 最佳答案
好吧,fileno
不可用,因为没有文件。fileno()
方法返回一个整数,表示打开的文件在操作系统的进程相关文件表中的位置。如果您实际上没有打开文件,则操作系统不会为您提供文件号。
程序的标准输入,输出和错误流(使用input
读取和使用print
写入的流)的编号为0
,1
和2
。系统通常会为后续打开的文件赋予序号。
这不能可靠地伪造:当没有实际文件支持该对象时,从fileno()
返回的任何内容都是谎言。这就是为什么实现选择提高UnsupportedOperation
的原因。除了None
之外,没有任何回报是有意义的。
如果绝对需要字符串内容使用fileno()
,则可以执行以下操作:
打开read+write
文件
写你的字符串
将文件倒带到开头
但是,必须有一个更好的设计,这不会迫使您使用此替代方法。