哪个python模块包含文件对象方法?

时间:2018-11-14 02:54:05

标签: python python-3.x

虽然使用help来搜索大多数具有明确help(module.method)排列方式的方法(例如help(list.extend))很简单,但我无法找出如何查找方法{{ 1}}在python的内置帮助功能中。

.readline()属于哪个模块?如何在.readline中搜索help和相关方法?

此外,我还有什么方法可以使用解释器来确定方法将来属于哪个模块?

2 个答案:

答案 0 :(得分:2)

不要尝试查找模块。创建所需类的实例,然后在该实例的方法上调用help,它将为您找到正确的帮助信息。示例:

>>> f = open('pathtosomefile')
>>> help(f.readline)
Help on built-in function readline:

readline(size=-1, /) method of _io.TextIOWrapper instance
    Read until newline or EOF.

    Returns an empty string if EOF is hit immediately.

在我的情况下(Python 3.7.1),它是在类型_io.TextIOWrapper上定义的(公开公开为io.TextIOWrapper,但help不知道),但是记住了那种类型的东西不是很有帮助。知道如何通过内省您所关心的特定事物来弄清楚这一点,在更广泛的范围内适用。在这种特殊情况下,不要尝试猜测是非常重要的,因为open函数可以返回几个不同的类,每个类具有不同的方法,具体取决于提供的参数,包括io.BufferedReader,{{1} },io.BufferedWriterio.BufferedRandom,每个都有自己的io.FileIO方法版本(尽管为了一致性,它们都共享相似的接口)。

答案 1 :(得分:0)

摘自help(open)的文本:

open() returns a file object whose type depends on the mode, and
through which the standard file operations such as reading and writing
are performed. When open() is used to open a file in a text mode ('w',
'r', 'wt', 'rt', etc.), it returns a TextIOWrapper. When used to open
a file in a binary mode, the returned class varies: in read binary
mode, it returns a BufferedReader; in write binary and append binary
modes, it returns a BufferedWriter, and in read/write mode, it returns
a BufferedRandom.

另请参见python's io module documentation on the class hierarchy.

部分

因此,您正在查看TextIOWrapperBufferedReaderBufferedWriterBufferedRandom。这些都具有自己的类层次结构集,但是只要它们在某个时刻共享IOBase超类就足够了,这就是在其中声明函数readline()readlines()的地方。当然,每个子类在其特定模式下实现这些功能的方式都不同-如果您这样做

help(_io.TextIOWrapper.readline)

您应该获得所需的文档。


尤其是,您无法访问所需的readline版本的文档,因为您不必费心找出它是哪个类。实际上,您也可以在 object 上调用help。如果您正在使用特定的文件对象,则可以旋转一个终端,实例化它,然后将其传递给help(),它将显示最接近表面的任何界面。示例:

x = open('some_file.txt', 'r')
help(x.readline)