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 相关文章推荐
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
Python中几个比较常见的名词解释
Jul 04 Python
使用Python编写爬虫的基本模块及框架使用指南
Jan 20 Python
对json字符串与python字符串的不同之处详解
Dec 19 Python
Python玩转Excel的读写改实例
Feb 22 Python
python定时检测无响应进程并重启的实例代码
Apr 22 Python
python3文件复制、延迟文件复制任务的实现方法
Sep 02 Python
python+tifffile之tiff文件读写方式
Jan 13 Python
python raise的基本使用
Sep 10 Python
python中操作文件的模块的方法总结
Feb 04 Python
pytorch 中forward 的用法与解释说明
Feb 26 Python
python for循环赋值问题
Jun 03 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 定义404页面的实现代码
2012/11/19 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
lib.utf.js
2007/08/21 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
js实现按钮加背景图片常用方法
2014/11/01 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
2016/06/17 Javascript
Javascript实现代码折叠功能
2016/08/25 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
2016/12/23 Javascript
vue中使用refs定位dom出现undefined的解决方法
2017/12/21 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
vue.js实现简单购物车功能
2020/05/30 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
python 文件与目录操作
2008/12/24 Python
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
python 中的int()函数怎么用
2017/10/17 Python
简单谈谈python基本数据类型
2018/09/26 Python
PIL图像处理模块paste方法简单使用详解
2019/07/17 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
PyCharm2019 安装和配置教程详解附激活码
2020/07/31 Python
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
移动通信行业实习自我鉴定
2013/09/28 职场文书
公司面试感谢信
2014/02/01 职场文书
2014年社区庆元旦活动方案
2014/03/08 职场文书
党校培训自我鉴定范文
2014/04/10 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
个人股份合作协议书
2014/10/24 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
施工现场安全管理制度
2015/08/05 职场文书
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL
纯html+css实现Element loading效果
2021/08/02 HTML / CSS