Python中的文件对象究竟是什么?
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 |
fileno 、seek 、truncate |
close 、closed 、__enter__ 、__exit__ 、flush 、isatty 、__iter__ 、__next__ 、readable 、readline 、readlines 、seekable 、tell 、writable 、writelines |
RawIOBase |
readinto 、write |
read 、readall |
BufferedIOBase |
detach 、read 、read1 、write |
readinto 、readinto1 |
TextIOBase |
detach 、read 、readline 、write |
encoding 、errors 、newlines |
这些方法的详细说明可以在上面链接的类文档中找到。
13
文件类似的对象主要包括 StringIO
对象、连接的套接字,还有真正的文件对象。
如果一切顺利, urllib.urlopen()
会返回一个支持必要方法的文件类似对象。