python中的文件指针



我在Python的文件处理中有一堆问题。请帮我整理一下。

假设我创建一个像这样的文件:

>>>f = open("text,txt", "w+")
>>>f.tell()
>>>0

f是一个文件对象

  1. 我可以假设它是一个文件指针吗?

  2. 如果是,f指的是什么?为文件结构中的第一个字节保留的空空间?

  3. 我可以假设文件结构是零索引吗?

  4. 在微处理器中,我学到的是指针总是指向下一条指令。在python中是怎样的?如果我在文件中写一个字符说'b',我的文件指针会指向字符'b'或'b'旁边的位置吗?

您不指定版本,并且Python 2和Python 3之间文件对象的行为略有不同。总的思路是一样的,但是一些具体的细节是不同的。以下假设您正在使用Python 3,或者您正在使用Python 2.6或2.7中io模块的open版本,而不是Python 2的内置open


它不是一个文件指针,尽管它很有可能在幕后被实现。与C语言不同,Python不公开指针的概念。

然而,你似乎在想的是"流位置",这有点类似于指针。这是tell()报告的数字,可以馈入seek()。对于二进制文件,它是从文件开始的字节偏移量。在文本文件中,它只是对文件对象有意义的"偏移量"——文档称其为"不透明数字"(即,就文件如何存储在磁盘上而言,它没有定义的物理含义)。但在这两种情况下,它都是起点的偏移量,因此起点为零。这只有在文件支持随机访问时才成立——通常支持随机访问,但要准备好最终遇到不支持随机访问的情况——在这种情况下,seektell会引发错误。

与处理器中的指令指针一样,流位置是下一个操作开始的位置,而不是当前操作结束的位置。所以,是的,在你向文件中写入一个字符串之后,当前位置通常会超过它的一个偏移值。

当您刚刚打开一个文件时,偏移量通常为零或文件末尾(比您可以在不获得EOF的情况下读取的最大值高一个)。如果你以'r'模式打开它,它将为零,如果你以'a'模式打开它,它将为结束,这两个模式对于'w'和'w+'模式是等效的,因为它们将文件截断为零字节。

    file对象是使用C标准库的stdio实现的。所以它包含一个"文件描述符"(因为它基于stdio,"在底层"它将包含一个指向struct FILE的指针,这就是通常所说的文件指针)。你可以使用tellseek。另一方面,它也是一个迭代器和上下文管理器。所以它有更多的功能
  1. 它不是指针,而是引用。请记住,在Python中f是一个名称,该引用一个文件对象
  2. 如果你使用的是file.seek(),它默认使用基于0的绝对定位。你把处理器寄存器和文件处理混淆了。这个问题没有意义。
  1. 文件对象没有什么特别的。把它想象成一个对象
  2. 名称 f指向堆上的文件对象,就像在l = [1, 2, 3]中名称l指向堆上的列表对象
  3. 从文档中,没有__getitem__成员,所以这不是一个有意义的问题

相关内容

  • 没有找到相关文章

最新更新