最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 如何判断Python对象是否为文件对象?

    正文概述    2020-04-24   267

    如何判断Python对象是否为文件对象?

    文件操作是开发中经常遇到的场景,那么如何判断一个对象是文件对象呢?下面我们总结了3种常见的方法。

    方法1:比较类型

    第一种方法,就是判断对象的type是否为file

    python
    >>> fp = open(r"/tmp/pythontab.com")
    >>> type(fp)
    <type 'file'>
    >>> type(fp) == file
    True

    注意:该方法对于从file继承而来的子类不适用, 看下面的实例

    class fileDetect(file):
        pass # 中间代码无所谓,直接跳过不处理
    fp2 = fileDetect(r"/tmp/pythontab.com")
    fileType = type(fp2)
    print(fileType)

    结果:

    <class '__main__.fileDetect'>

    方法2:isinstance方法

    要判断一个对象是否为文件对象(file object),可以直接用isinstance()判断。

    如下代码中,open得到的对象fp类型为file,当然是file的实例,而filename类型为str,自然不是file的实例

    >>> isinstance(fp, file)
    True
    >>> isinstance(fp2, file)
    True
    >>> filename = r"/tmp/pythontab.com"
    >>> type(filename)
    <type 'str'>
    >>> isinstance(filename, file)
    False

    方法3:推测法

    在python中,类型并没有那么重要,重要的是”接口“。如果它走路像鸭子,叫声也像鸭子,我们就认为它是鸭子(起码在走路和叫声这样的行为上)。

    按照这个思路我们就有了第3中判断方法:判断一个对象是否具有可调用的read,write,close方法(属性)。

    def isfile(f):
        """
        Check if object 'f' is readable file-like 
    that it has callable attributes 'read' , 'write' and 'close'
        """
    try:
    if isinstance(getattr(f, "read"), collections.Callable) \
    and isinstance(getattr(f, "write"), collections.Callable) \
    and isinstance(getattr(f, "close"), collections.Callable):
    return True
    except AttributeError:
    pass
    return False

    起源地下载网 » 如何判断Python对象是否为文件对象?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元