【问题标题】:What type are file objects in Python [closed]Python中的文件对象是什么类型[关闭]
【发布时间】:2014-07-01 02:00:58
【问题描述】:

如何使用'isinstance'来确定文件对象的'类型',比如在表达式中:

>>> open(file)

【问题讨论】:

  • 判断open(file)的类型是什么意思?您是指文件中文本的类型(例如 int、string)吗?
  • 谷歌搜索问题标题的第一击:"This function creates a file object"
  • 如果您在 Python3 中寻找合适的类型提示时遇到此问题,请使用从 typing 导入的 TextIO(例如,在“序言”中使用 from typing import TextIO,然后在代码中使用 file_handle : TextIO = open(...)。跨度>

标签: python python-2.7 types filehandle isinstance


【解决方案1】:

在 Python 2.x 中,所有文件对象的类型都是 file

>>> type(open('file.txt'))
<type 'file'>
>>>
>>> isinstance(open('file.txt'), file)
True
>>>

然而,在 Python 3.x 中,普通文件对象的类型为 io.TextIOWrapper

>>> type(open('file.txt'))
<class '_io.TextIOWrapper'>
>>>
>>> from io import TextIOWrapper
>>> isinstance(open('file.txt'), TextIOWrapper)
True
>>>

【讨论】:

  • 大多数时候,你并不在乎。你关心它是一个可迭代的行,或者它有一个read 方法或一个write 方法,或者其他与文件接口相关的东西。这就是您应该检查的内容,通常只需尝试像文件一样使用对象并在它不支持您需要的接口时捕获错误。
  • 仅供参考,以二进制模式打开文件open('file.txt', 'rb') 会导致&lt;class '_io.BufferedReader'&gt; 类型。
  • TextIOWrapper 是在默认/文本模式下打开时返回的内容,BufferedReader 是在二进制 ('b') 模式下得到的内容,因此您可以单独检查或仅使用他们的超类IOBase如果你想同时抓住这两个
【解决方案2】:

the documentation for open中所述:

打开一个文件,返回一个file 类型的对象,在File Objects 部分中描述。

因此,open 返回一个file,您应该使用isinstance(foo, file)

【讨论】:

    【解决方案3】:

    它的类型是file。你可以通过type(open("file","w"))的输出来判断

    【讨论】:

    • 这已经过时了。
    猜你喜欢
    • 2022-01-21
    • 2016-10-07
    • 2011-05-20
    • 2021-11-22
    • 2020-10-02
    • 2014-06-05
    • 1970-01-01
    • 2015-05-20
    • 2016-11-08
    相关资源
    最近更新 更多