11tadpole 发表于 2021-8-19 23:12:46

_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)之后,反馈的不是文件中的内容?

大马强 发表于 2021-8-20 07:45:41

每种文件都要特定的打开姿势
MP3要用二进制读取,你不写打开方式默认"r",编码好像不要来着,
with open('OpenMe.mp3',"rb") as f1:

wp231957 发表于 2021-8-20 15:44:03

这是一个对象,不能用str强转
如果是纯文本文件,可以用list强转

阿奇_o 发表于 2021-8-20 16:21:49

本帖最后由 阿奇_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]
查看完整版本: _io.textiowrapper什么意思