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 字典(Dictionary)操作详解
Mar 11 Python
python教程之用py2exe将PY文件转成EXE文件
Jun 12 Python
python的绘图工具matplotlib使用实例
Jul 03 Python
Python多进程编程技术实例分析
Sep 16 Python
Python复制目录结构脚本代码分享
Mar 06 Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 Python
Python 中 Meta Classes详解
Feb 13 Python
运动检测ViBe算法python实现代码
Jan 09 Python
pyqt5的QWebEngineView 使用模板的方法
Aug 18 Python
Numpy一维线性插值函数的用法
Apr 22 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
Jun 10 Python
Python爬虫入门案例之爬取二手房源数据
Oct 16 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中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
php中DOMElement操作xml文档实例演示
2013/03/26 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
thinkPHP中分页用法实例分析
2015/12/26 PHP
PHP读取Excel类文件
2017/05/15 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
2017/08/25 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
JavaScript null和undefined区别分析
2009/10/14 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
2018/06/08 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
python发送邮件接收邮件示例分享
2014/01/21 Python
在Python3中初学者应会的一些基本的提升效率的小技巧
2015/03/31 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
django迁移文件migrations的实现
2020/03/31 Python
flask项目集成swagger的方法
2020/12/09 Python
求职信内容考虑哪几点
2013/10/05 职场文书
英文自荐信
2013/12/15 职场文书
工程专业毕业生自荐信范文
2013/12/25 职场文书
初三家长会邀请函
2014/01/18 职场文书
幼儿园优秀教师事迹
2014/02/13 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
2014年监理个人工作总结
2014/12/11 职场文书
仓管员岗位职责范本
2015/04/01 职场文书
失恋33天观后感
2015/06/11 职场文书
运动会通讯稿600字
2015/07/20 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书
SpringCloud的JPA连接PostgreSql的教程
2021/06/26 Java/Android