什么是Python中的文件类对象?

时间:2010-12-05 15:25:59

标签: python

http://docs.python.org/library/json.html中:

  

simplejson.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, use_decimal[, **kw]]]]]]]]])

     

将fp(一个.read() - 支持包含JSON文档的类文件对象)反序列化为Python对象。

我知道read()write()做了什么。

但是在阅读了这个描述“read() - 支持类似文件的对象”之后,我发现我不知道哪种对象类型支持read()write()

我在其他文档中找不到。 任何人都可以详细说明声明?

为什么我问这个问题是为了让“simplejson.load(urllib.open(...))”完成。
“urllib.open(...)”的返回值不是有效对象,因此我必须为simplejson定制它。但是,似乎该字符串不是read() - 支持。

5 个答案:

答案 0 :(得分:7)

类似文件的对象主要是StringIO个对象,连接的套接字以及实际的文件对象。 如果一切顺利,urllib.urlopen()也会返回一个类似文件的objekt,支持必要的方法。

答案 1 :(得分:1)

simplejson有调用加载转储,它们使用和生成字符串而不是像对象这样的文件。

对于类文件和字符串对象,此链接在StringIO和simplejson的上下文中有一个示例。

http://svn.red-bean.com/bob/simplejson/tags/simplejson-1.3/docs/index.html

答案 2 :(得分:1)

在Python中,文件对象是一个暴露API的对象,该API具有执行通常在文件上执行的操作的方法,例如read()write()

在问题的示例中:simplejson.load(fp, ...),只需要通过fp方法调用作为read()传递的对象,该方法就可以在一个read()上被调用。文件(即接受可选参数size并返回strbytes对象)。

不过,只要它具有read()方法,就不必是真实文件。

类似于文件的对象只是 file-object 的同义词。参见Python Glossary

答案 3 :(得分:0)

来自glossary

  

file-like object

     

文件对象的同义词

一个文件对象是

  

file object

     

暴露面向文件的API的对象(带有诸如   作为底层资源的read()或write())。根据方式   它创建后,文件对象可以调解对实际磁盘的访问   文件或其他类型的存储或通信设备(用于   示例标准输入/输出,内存缓冲区,套接字,管道,   等等。)。文件对象也称为类似文件的对象或流。

     

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

答案 4 :(得分:0)

The IO Class Hierarchy section in the IO documentation 包含一个表格,其中列出了不同类型的类文件对象的内置方法和存根方法。

基本上,有一个抽象基类的层次结构:

要实现类文件对象,您需要对 IOBase 的三个后代之一进行子类化,而不是对 IOBase 本身进行子类化。请参阅 this answer 以尝试确定给定的类文件对象是其中的哪一个。

这些类中的每一个都提供了各种存根方法和混合:

<头>
班级 存根方法 混合
IOBase filenoseektruncate closeclosed__enter____exit__flushisatty__iter____next__readablereadlinereadlinesseekabletellwritablewritelines
RawIOBase readinto, write read, readall
BufferedIOBase detachreadread1write readinto, readinto1
TextIOBase detachreadreadlinewrite encodingerrorsnewlines

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