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迭代和迭代器
Mar 28 Python
Django中间件实现拦截器的方法
Jun 01 Python
tensorflow 获取模型所有参数总和数量的方法
Jun 14 Python
django之对FileField字段的upload_to的设定方法
Jul 28 Python
Python获取统计自己的qq群成员信息的方法
Nov 15 Python
numpy实现神经网络反向传播算法的步骤
Dec 24 Python
Django自定义列表 models字段显示方式
Apr 03 Python
python实现猜数游戏(保存游戏记录)
Jun 22 Python
python如何代码集体右移
Jul 20 Python
pandas处理csv文件的方法步骤
Oct 16 Python
python爬虫中url管理器去重操作实例
Nov 30 Python
用Python制作音乐海报
Jan 26 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/10/04 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
js中自定义react数据验证组件实例详解
2018/10/19 Javascript
微信网页登录逻辑与实现方法
2019/04/29 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
[01:31]完美与DOTA2历程
2014/07/31 DOTA
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
2015/04/24 Python
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
python format 格式化输出方法
2018/07/16 Python
ipad上运行python的方法步骤
2019/10/12 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
CSS3悬停效果案例应用
2012/11/21 HTML / CSS
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
纯CSS3大转盘抽奖示例代码(响应式、可配置)
2017/01/13 HTML / CSS
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
2014/01/18 面试题
SQL SERVER面试资料
2013/03/30 面试题
《春晓》教学反思
2014/04/20 职场文书
贪污检举信范文
2015/03/02 职场文书
行为习惯主题班会
2015/08/14 职场文书
幼儿园大班教师评语
2019/06/21 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
利用python做表格数据处理
2021/04/13 Python
python基础之停用词过滤详解
2021/04/21 Python
css之clearfix的用法深入理解(必看篇)
2023/05/21 HTML / CSS