Python判断对象是否为文件对象(file object)的三种方法示例


Posted in Python onApril 26, 2019

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

方法1:比较类型

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

>>> 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方法(属性)。

参看:http://docs.python.org/glossary.html#term-file-object

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 相关文章推荐
python计数排序和基数排序算法实例
Apr 25 Python
python多线程threading.Lock锁用法实例
Nov 01 Python
Python写的英文字符大小写转换代码示例
Mar 06 Python
python中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
提升Python程序运行效率的6个方法
Mar 31 Python
Python使用SocketServer模块编写基本服务器程序的教程
Jul 12 Python
Python中字符串的常见操作技巧总结
Jul 28 Python
简单谈谈Python中的json与pickle
Jul 19 Python
对python修改xml文件的节点值方法详解
Dec 24 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
pandas.cut具体使用总结
Jun 24 Python
PyQT5 QTableView显示绑定数据的实例详解
Jun 25 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
Apr 26 #Python
浅谈python新式类和旧式类区别
Apr 26 #Python
Python静态类型检查新工具之pyright 使用指南
Apr 26 #Python
Python3中_(下划线)和__(双下划线)的用途和区别
Apr 26 #Python
详解Python爬取并下载《电影天堂》3千多部电影
Apr 26 #Python
Python 2/3下处理cjk编码的zip文件的方法
Apr 26 #Python
实例详解Matlab 与 Python 的区别
Apr 26 #Python
You might like
PHP截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
PHP 自定义错误处理函数的使用详解
2013/05/10 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
php编程实现简单的网页版计算器功能示例
2017/04/26 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
用PHP做了一个领取优惠券活动的示例代码
2019/07/05 PHP
Javascript - HTML的request类
2006/07/15 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
js replace正则表达式应用案例讲解
2013/01/17 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
eclipse导入jquery包后报错的解决方法
2014/02/17 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
javascript运算符——逻辑运算符全面解析
2016/06/27 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
three.js快速入门【推荐】
2017/01/21 Javascript
快速搭建React的环境步骤详解
2017/11/06 Javascript
仿ElementUI实现一个Form表单的实现代码
2019/04/23 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
Django教程笔记之中间件middleware详解
2018/08/01 Python
Python同时处理多个异常的方法
2020/07/28 Python
英国领先的鞋类零售商和顶级品牌的官方零售商:Wynsors
2020/02/17 全球购物
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
业务员岗位职责范本
2013/12/15 职场文书
店长职务说明书
2014/02/04 职场文书
公司担保书范文
2014/05/21 职场文书
植树节标语
2014/06/27 职场文书
员工安全责任书范本
2014/07/24 职场文书
上课玩手机的检讨书
2014/10/01 职场文书
学校师德师风整改方案
2014/10/28 职场文书
地球一小时活动总结
2015/02/27 职场文书
大学生入党自荐书
2015/03/05 职场文书
学术会议通知范文
2015/04/15 职场文书