`
GhostFromheaven
  • 浏览: 396989 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

python判断对象是否为文件对象(file object)

阅读更多

方法1:比较type

第一种方法,就是判断对象的type是否为file,但该方法对于从file继承而来的子类不适用

 

[python] view plaincopy
  1. >>> f = open(r"D:\2.zip")  
  2. >>> type(f)  
  3. <type 'file'>  
  4. >>> type(f) == file  
  5. True  
  6. >>> class MyFile(file):  
  7.     pass  
  8.   
  9. >>> mf = MyFile(r"D:\2.txt")  
  10. >>> type(mf)  
  11. <class '__main__.MyFile'>  
  12. >>> type(mf) == file  
  13. False  

 

方法2:isinstance

要判断一个对象是否为文件对象(file object),可以直接用isinstance()判断。

如下代码中,open得到的对象f类型为file,当然是file的实例,而filename类型为str,自然不是file的实例

 

[python] view plaincopy
  1. >>> isinstance(f, file)  
  2. True  
  3. >>> isinstance(mf, file)  
  4. True  
  5. >>> filename = r"D:\2.zip"  
  6. >>> type(filename)  
  7. <type 'str'>  
  8. >>> isinstance(filename, file)  
  9. False  

 

方法3:duck like(像鸭子一样)

在python中,类型并没有那么重要,重要的是”接口“。如果它走路像鸭子,叫声也像鸭子,我们就认为它是鸭子(起码在走路和叫声这样的行为上)。

按照这个思路我们就有了第3中判断方法:判断一个对象是否具有可调用的read,write,close方法(属性)。

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

 

[python] view plaincopy
  1. def isfilelike(f):  
  2.     """ 
  3.     Check if object 'f' is readable file-like  
  4.     that it has callable attributes 'read' , 'write' and 'closer' 
  5.     """  
  6.     try:  
  7.         if isinstance(getattr(f, "read"), collections.Callable) \  
  8.             and isinstance(getattr(f, "write"), collections.Callable) \  
  9.                 and isinstance(getattr(f, "close"), collections.Callable):  
  10.             return True  
  11.     except AttributeError:  
  12.         pass  
  13.     return False  


 

其他:读/写方式打开的”类文件“对象

只从文件读入数据的时候只要检查对象是否具有read,close;相应的只往文件中写入数据的时候仅需要检查对象是否具有write,close方法。就像如果仅从走路方式判断它是否为鸭子,只检查是否”走路像鸭子“;如果仅从声音来判断,则仅需要检查是否”叫声像鸭子“。

 

[python] view plaincopy
  1. def isfilelike_r(f):  
  2.     """ 
  3.     Check if object 'f' is readable file-like  
  4.     that it has callable attributes 'read' and 'close' 
  5.     """  
  6.     try:  
  7.         if isinstance(getattr(f, "read"), collections.Callable) \  
  8.             and isinstance(getattr(f, "close"), collections.Callable):  
  9.             return True  
  10.     except AttributeError:  
  11.         pass  
  12.     return False  
  13.   
  14. def isfilelike_w(f):  
  15.     """ 
  16.     Check if object 'f' is readable file-like  
  17.     that it has callable attributes 'write' and 'close' 
  18.     """  
  19.     try:  
  20.         if isinstance(getattr(f, "write"), collections.Callable) \  
  21.             and isinstance(getattr(f, "close"), collections.Callable):  
  22.             return True  
  23.     except AttributeError:  
  24.         pass  
  25.     return False  

另:为什么用getattr而不是hasattr

 

这里为什么不用hasattr,而是用getattr来承担抛出AttributeError的风险呢?

一方面,hasattr就是直接调用getattr来看是否抛出了AttributeError,如果没有抛出就返回True,否则返回False,参看这里。既然如此,我们就可以自己来完成这个工作。

另一方面,这样我们可以得到属性对象,然后可以用isinstance判断是否为collections.Callable的实例。两者结合,如果有该属性,并可以被调用,则返回True。

0
3
分享到:
评论

相关推荐

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

    在Python编程中,文件操作是不可或缺的一部分,而正确地识别一个对象是否为文件对象(file object)至关重要,因为这关系到能否对其进行读写等操作。本文将详细介绍三种判断Python对象是否为文件对象的方法。 方法1:...

    python面向对象+文件操作

    在Python编程语言中,面向对象(Object-Oriented Programming,OOP)是一种强大的设计和组织代码的方法。它基于“对象”的概念,每个对象都包含了数据(属性)和操作这些数据的方法(函数)。在这个主题中,我们将...

    python案例面向对象、文件版学生管理系统

    在本案例中,"python案例面向对象、文件版学生管理系统"是一个使用Python编程语言实现的教育管理应用程序。这个系统利用了面向对象编程的概念,以及Python的文件操作功能,以存储和管理学生信息。以下是该系统涉及到...

    python json文件转txt文件,批处理json文件转换成一个txt文件

    标题中的"python json文件转txt文件,批处理json文件转换成一个txt文件",指的是使用Python编写脚本来读取多个JSON文件,解析其内容,并将数据写入到TXT文件中。这通常涉及到以下步骤: 1. **导入必要的库**:首先...

    Python实现导出Word文档中的所有图片、嵌入的文件

    - `oletools`是Python的一个工具包,专门用于分析和反恶意软件的OLE(Object Linking and Embedding)文件。虽然主要目的是安全分析,但也可以用于提取Word文档中的嵌入文件,因为它们通常存储在OLE结构中。 5. **...

    将Python列表内容写入JSON文件并存储的两种方法

    除了将列表转换为字符串再写入文件外,`json`模块还提供了一个更直接的方法——`json.dump()`,它可以将Python对象直接写入JSON格式到文件。 以下是使用`json.dump()`的示例代码: ```python import json # 示例...

    Python读写文件方法读取各种类型文件

    ### Python读写文件方法读取各种类型文件 #### 一、概述 在Python编程中,对文件的操作是一项基本且重要的技能。无论是简单的文本文件还是复杂的二进制文件,Python都提供了丰富的工具和方法来帮助开发者高效地...

    python 合并json文件代码

    在Python中,我们可以使用`json.load()`函数将JSON文件加载为一个Python对象,通常是字典或列表。然后,我们可以遍历这些文件,将它们合并到一个大字典中。如果遇到相同的键,我们可能需要决定如何处理冲突,比如...

    Python库 | blobfile-1.2.3-py3-none-any.whl

    "blobfile"是一个Python库,主要设计用于处理云存储服务中的大对象(Binary Large Object,简称BLOB)。在云计算环境中,BLOB通常用来存储图片、视频、音频等非结构化数据。这个库提供了方便的API接口,让开发者能够...

    python文件处理笔记

    fileobject = open(filename, access_mode) ``` 其中,`filename` 表示文件名,`access_mode` 表示访问模式,主要包括以下几种: - **'r'** (read): 以只读方式打开文件,默认模式。 - **'rb'**: 以二进制格式打开...

    将类的对象写入文件.rar

    # 打开已保存的对象文件,准备读取 with open('object_file.pickle', 'rb') as file: # 使用pickle的load函数将文件中的字节流反序列化为对象 loaded_obj = pickle.load(file) print(loaded_obj.attr1) # 输出:...

    python读取配置文件

    在Python编程中,读取配置文件是一个常见的任务,它允许我们分离程序的配置信息,如数据库连接、API密钥或应用程序设置,以便于管理和维护。本文将深入探讨如何使用Python来读取配置文件,主要关注从`.ini`、`.json`...

    python 修改原文件的指定内容

    使用`json.load()`函数,可以从文件中读取JSON数据并转化为Python对象。例如: ```python import json with open('file.json', 'r') as f: data = json.load(f) ``` 这里的`data`将会是解析后的Python字典或...

    boost python 1.49 编译的库文件

    在给定的压缩包文件中,包含的是针对Visual Studio 2008(即VS2008)和Python 2.6环境下的Boost.Python库的编译版本,版本号为1.49。这个库允许C++代码调用Python函数,同时也可以将C++类和对象暴露给Python,从而...

    python json文件转txt文件,批处理json文件转换成一个txt文件,

    在这个函数中,我们使用`json.load()`方法读取JSON文件并将其内容解析为Python对象。然后,我们遍历每个字典,并将其内容转换为TXT格式的行。 3. 定义批处理函数,处理多个JSON文件: ```python def batch_convert_...

    C#执行python文件

    在实际应用中,你可能需要处理Python和C#之间的数据类型转换,如将C#的`int`转换为Python的`int`,或者将Python的`list`转换为C#的`List&lt;T&gt;`。同时,注意处理可能出现的异常,以确保程序的健壮性。 在C#中执行...

    利用Python语句读取json文件,并输出相应数据

    这个函数接受一个打开的文件对象,将其内容解析为Python数据结构(如字典或列表),如下所示: ```python import json # 打开JSON文件 with open('json/file.json', 'r') as file: # 使用json.load()读取JSON数据...

Global site tag (gtag.js) - Google Analytics