我有以下代码:
>>> 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
- 写下你的字符串
- 将文件倒回开头
必须有更好的设计,但是,这不会强制您使用此解决方法。
关于python - 转换为 TextIOWrapper 的 BytesIO 对象没有 fileno 属性。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42790693/