方法1:比较type
第一种方法,就是判断对象的type是否为file,但该方法对于从file继承而来的子类不适用:
- >>> f = open(r"D:\2.zip")
- >>> type(f)
- <type 'file'>
- >>> type(f) == file
- True
- >>> class MyFile(file):
- pass
-
- >>> mf = MyFile(r"D:\2.txt")
- >>> type(mf)
- <class '__main__.MyFile'>
- >>> type(mf) == file
- False
方法2:isinstance
要判断一个对象是否为文件对象(file object),可以直接用isinstance()判断。
如下代码中,open得到的对象f类型为file,当然是file的实例,而filename类型为str,自然不是file的实例
- >>> isinstance(f, file)
- True
- >>> isinstance(mf, file)
- True
- >>> filename = r"D:\2.zip"
- >>> type(filename)
- <type 'str'>
- >>> isinstance(filename, file)
- False
方法3:duck like(像鸭子一样)
在python中,类型并没有那么重要,重要的是”接口“。如果它走路像鸭子,叫声也像鸭子,我们就认为它是鸭子(起码在走路和叫声这样的行为上)。
按照这个思路我们就有了第3中判断方法:判断一个对象是否具有可调用的read,write,close方法(属性)。
参看:http://docs.python.org/glossary.html#term-file-object
- def isfilelike(f):
-
-
-
-
- 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
其他:读/写方式打开的”类文件“对象
只从文件读入数据的时候只要检查对象是否具有read,close;相应的只往文件中写入数据的时候仅需要检查对象是否具有write,close方法。就像如果仅从走路方式判断它是否为鸭子,只检查是否”走路像鸭子“;如果仅从声音来判断,则仅需要检查是否”叫声像鸭子“。
- def isfilelike_r(f):
-
-
-
-
- try:
- if isinstance(getattr(f, "read"), collections.Callable) \
- and isinstance(getattr(f, "close"), collections.Callable):
- return True
- except AttributeError:
- pass
- return False
-
- def isfilelike_w(f):
-
-
-
-
- try:
- if isinstance(getattr(f, "write"), collections.Callable) \
- and isinstance(getattr(f, "close"), collections.Callable):
- return True
- except AttributeError:
- pass
- return False
另:为什么用getattr而不是hasattr
这里为什么不用hasattr,而是用getattr来承担抛出AttributeError的风险呢?
一方面,hasattr就是直接调用getattr来看是否抛出了AttributeError,如果没有抛出就返回True,否则返回False,参看这里。既然如此,我们就可以自己来完成这个工作。
另一方面,这样我们可以得到属性对象,然后可以用isinstance判断是否为collections.Callable的实例。两者结合,如果有该属性,并可以被调用,则返回True。
分享到:
相关推荐
在Python编程中,文件操作是不可或缺的一部分,而正确地识别一个对象是否为文件对象(file object)至关重要,因为这关系到能否对其进行读写等操作。本文将详细介绍三种判断Python对象是否为文件对象的方法。 方法1:...
在Python编程语言中,面向对象(Object-Oriented Programming,OOP)是一种强大的设计和组织代码的方法。它基于“对象”的概念,每个对象都包含了数据(属性)和操作这些数据的方法(函数)。在这个主题中,我们将...
在本案例中,"python案例面向对象、文件版学生管理系统"是一个使用Python编程语言实现的教育管理应用程序。这个系统利用了面向对象编程的概念,以及Python的文件操作功能,以存储和管理学生信息。以下是该系统涉及到...
标题中的"python json文件转txt文件,批处理json文件转换成一个txt文件",指的是使用Python编写脚本来读取多个JSON文件,解析其内容,并将数据写入到TXT文件中。这通常涉及到以下步骤: 1. **导入必要的库**:首先...
- `oletools`是Python的一个工具包,专门用于分析和反恶意软件的OLE(Object Linking and Embedding)文件。虽然主要目的是安全分析,但也可以用于提取Word文档中的嵌入文件,因为它们通常存储在OLE结构中。 5. **...
除了将列表转换为字符串再写入文件外,`json`模块还提供了一个更直接的方法——`json.dump()`,它可以将Python对象直接写入JSON格式到文件。 以下是使用`json.dump()`的示例代码: ```python import json # 示例...
### Python读写文件方法读取各种类型文件 #### 一、概述 在Python编程中,对文件的操作是一项基本且重要的技能。无论是简单的文本文件还是复杂的二进制文件,Python都提供了丰富的工具和方法来帮助开发者高效地...
在Python中,我们可以使用`json.load()`函数将JSON文件加载为一个Python对象,通常是字典或列表。然后,我们可以遍历这些文件,将它们合并到一个大字典中。如果遇到相同的键,我们可能需要决定如何处理冲突,比如...
"blobfile"是一个Python库,主要设计用于处理云存储服务中的大对象(Binary Large Object,简称BLOB)。在云计算环境中,BLOB通常用来存储图片、视频、音频等非结构化数据。这个库提供了方便的API接口,让开发者能够...
fileobject = open(filename, access_mode) ``` 其中,`filename` 表示文件名,`access_mode` 表示访问模式,主要包括以下几种: - **'r'** (read): 以只读方式打开文件,默认模式。 - **'rb'**: 以二进制格式打开...
# 打开已保存的对象文件,准备读取 with open('object_file.pickle', 'rb') as file: # 使用pickle的load函数将文件中的字节流反序列化为对象 loaded_obj = pickle.load(file) print(loaded_obj.attr1) # 输出:...
在Python编程中,读取配置文件是一个常见的任务,它允许我们分离程序的配置信息,如数据库连接、API密钥或应用程序设置,以便于管理和维护。本文将深入探讨如何使用Python来读取配置文件,主要关注从`.ini`、`.json`...
使用`json.load()`函数,可以从文件中读取JSON数据并转化为Python对象。例如: ```python import json with open('file.json', 'r') as f: data = json.load(f) ``` 这里的`data`将会是解析后的Python字典或...
在给定的压缩包文件中,包含的是针对Visual Studio 2008(即VS2008)和Python 2.6环境下的Boost.Python库的编译版本,版本号为1.49。这个库允许C++代码调用Python函数,同时也可以将C++类和对象暴露给Python,从而...
在这个函数中,我们使用`json.load()`方法读取JSON文件并将其内容解析为Python对象。然后,我们遍历每个字典,并将其内容转换为TXT格式的行。 3. 定义批处理函数,处理多个JSON文件: ```python def batch_convert_...
在实际应用中,你可能需要处理Python和C#之间的数据类型转换,如将C#的`int`转换为Python的`int`,或者将Python的`list`转换为C#的`List<T>`。同时,注意处理可能出现的异常,以确保程序的健壮性。 在C#中执行...
这个函数接受一个打开的文件对象,将其内容解析为Python数据结构(如字典或列表),如下所示: ```python import json # 打开JSON文件 with open('json/file.json', 'r') as file: # 使用json.load()读取JSON数据...