Python的`file.read`函数如何计算出文件的大小?

时间:2013-12-16 06:01:32

标签: python c python-2.7 cpython

我正在查看Python-2.7.6的源代码来解决这个问题。

Objects/fileobject.c第1052行,有一个名为file_read的函数,我猜这个函数对应read中文件对象上的函数Python

在同一档案的第1067行,我看到以下行。请注意,在函数中进一步使用bytesrequested来确定要分配用于存储文件的缓冲区的大小。

 if (!PyArg_ParseTuple(args, "|l:read", &bytesrequested))

看起来请求的字节数以某种方式在args内编码,其类型为PyObject*。因此,继续搜索的自然地点是找出file_read被调用的位置。

但是,我找不到实际调用file_read的整个Python源代码树(递归grep)中的任何位置,因此我无法继续跟踪以了解实际计算bytesrequested的方式。 file_read在源树的不同部分以不同的名称调用吗?

1 个答案:

答案 0 :(得分:4)

查看line 2114

file_read是python的file.read方法。 C代码中的args是您传递给file.read的参数。 bytesrequested是您传递给file.read

的参数
with open('file') as fin:
    fin.read(5)  # bytesrequested will be 5.