_io.textiowrapper什么意思
第28讲,我在写代码时,进行了这个尝试with open('OpenMe.mp3', encoding = 'utf-8') as f1:m = str(f1)
print(m)
显示内容为:<_io.TextIOWrapper name='OpenMe.mp3' mode='r' encoding='utf-8'>
我不明白:
1. io.TextIOWrapper什么意思?
2. 为什么str(f1)之后,反馈的不是文件中的内容? 每种文件都要特定的打开姿势
MP3要用二进制读取,你不写打开方式默认"r",编码好像不要来着,
with open('OpenMe.mp3',"rb") as f1: 这是一个对象,不能用str强转
如果是纯文本文件,可以用list强转 本帖最后由 阿奇_o 于 2021-8-20 16:24 编辑
暂时你不需要明白,_io.TextIOWrapper
真要深究单看这文档https://docs.python.org/3/library/io.html#io.TextIOWrapper
也不完全能解答,因为前面还有个 _io.
所以,你只要知道它是个"对象",是个叫"TextIOWrapper"的对象,然后可以干嘛用的,就行。
其次,str(obj) 其实是 会调用对象obj的__str__方法,故结果是根据__str__方法的定制来的(自定义类里你可以随便怎么写),
如
In : with open('t.txt', 'r', encoding='utf-8') as f:
...: print(type(f))
...: print(f.__str__())
...:
<class '_io.TextIOWrapper'>
<_io.TextIOWrapper name='t.txt' mode='r' encoding='utf-8'>
>>> class Foo:
def __str__(self):
return "我是 假的 <_io.TextIOWrapper name='t.txt' mode='r' ..>"
>>> print(Foo)# 类的
<class '__main__.Foo'>
>>> print(str(Foo())) # 对象的 .__str__()
我是 假的 <_io.TextIOWrapper name='t.txt' mode='r' ..>
>>> f = Foo()
>>> print(f)
我是 假的 <_io.TextIOWrapper name='t.txt' mode='r' ..>
>>>
>>>
页:
[1]