Python中的文件对象究竟是什么?

54 投票
6 回答
59961 浏览
提问于 2025-04-16 08:04

来自标准库 json 模块的文档

json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

obj 作为 JSON 格式的数据流写入 fp(一个支持 .write() 方法的类文件对象),使用这个转换表。

这段描述到底是什么意思呢?什么样的对象类型是“支持 .write()”和“类文件的”?

6 个回答

20

IO文档中的IO类层次结构部分有一个表格,列出了不同类型的文件对象的内置方法和占位符方法。

简单来说,这里有一系列的抽象基类:

  • IOBase,它的功能比较基础
    • RawIOBase,提供不带缓冲的二进制输入输出
    • BufferedIOBase,提供带缓冲的二进制输入输出
    • TextIOBase,提供带缓冲的字符串输入输出

如果你想实现一个类似文件的对象,你需要从这三个类中的一个继承,而不是直接从IOBase继承。想了解如何判断一个文件对象是哪个类型,可以参考这个回答

这些类提供了各种占位符方法和混合功能:

占位符方法 混合功能
IOBase filenoseektruncate closeclosed__enter____exit__flushisatty__iter____next__readablereadlinereadlinesseekabletellwritablewritelines
RawIOBase readintowrite readreadall
BufferedIOBase detachreadread1write readintoreadinto1
TextIOBase detachreadreadlinewrite encodingerrorsnewlines

这些方法的详细说明可以在上面链接的类文档中找到。

28

来自术语表

类文件对象

就是文件对象的另一种说法。

而文件对象是:

文件对象

它是一个提供文件相关操作的对象,比如有读取(read())和写入(write())的方法。根据它是怎么创建的,文件对象可以用来访问真实的磁盘文件,或者其他类型的存储和通信设备,比如标准输入/输出、内存缓冲区、套接字、管道等等。文件对象也被称为类文件对象或流。

实际上,文件对象分为三类:原始二进制文件、缓冲二进制文件和文本文件。它们的接口在io模块中定义。创建文件对象的标准方法是使用open()函数。

13

文件类似的对象主要包括 StringIO 对象、连接的套接字,还有真正的文件对象。

如果一切顺利, urllib.urlopen() 会返回一个支持必要方法的文件类似对象。

撰写回答