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设计模式编程的代理模式与抽象工厂模式
Jan 16 Python
Python操作Excel之xlsx文件
Mar 24 Python
OpenCV实现人脸识别
Apr 07 Python
深入理解Python中的*重复运算符
Oct 28 Python
python写入已存在的excel数据实例
May 03 Python
python中matplotlib条件背景颜色的实现
Sep 02 Python
python 用户交互输入input的4种用法详解
Sep 24 Python
关于Tensorflow 模型持久化详解
Feb 12 Python
Django实现celery定时任务过程解析
Apr 21 Python
Pycharm无法打开双击没反应的问题及解决方案
Aug 17 Python
python热力图实现简单方法
Jan 29 Python
Python基础教程,Python入门教程(超详细)
Jun 24 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
MYSQL 小技巧 -- LAST_INSERT_ID
2009/11/24 PHP
zen cart新进商品的随机排序修改方法
2010/09/10 PHP
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
探寻PHP脚本不报错的原因
2014/06/12 PHP
php实现可运算的验证码
2015/11/10 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
2017/01/11 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
jQuery操作css样式
2017/05/15 jQuery
bootstrap-Treeview实现级联勾选
2017/11/23 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
对node.js中render和send的用法详解
2018/05/14 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
javaScript代码飘红报错看不懂?读完这篇文章再试试
2020/08/19 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
Python continue语句实例用法
2020/02/06 Python
Django实现将一个字典传到前端显示出来
2020/04/03 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
Emma Bridgewater官网:英国餐具制造商
2019/11/24 全球购物
工商管理专业应届生求职信
2013/11/04 职场文书
员工年终演讲稿
2014/01/03 职场文书
门店业绩提升方案
2014/06/08 职场文书
2014年管理工作总结
2014/11/22 职场文书
小学生作文批改评语
2014/12/25 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
清明扫墓感想
2015/08/11 职场文书
2016年暑假学生家长评语
2015/12/01 职场文书
生鲜超市—未来中国最具有潜力零售业态
2019/08/02 职场文书