我在 Python 中的文件处理方面有很多问题。请帮我整理一下。
假设我创建一个类似这样的文件。
>>>f = open("text,txt", "w+")
>>>f.tell()
>>>0
Run Code Online (Sandbox Code Playgroud)
f 是一个文件对象。
我可以假设它是一个文件指针吗?
如果是的话 f 指向什么?文件结构中为第一个字节保留的空白空间?
我可以假设文件结构为零索引吗?
在微处理器中,我了解到指针总是指向下一条指令。在Python中它是怎样的?如果我在文件中写入一个字符“b”,我的文件指针是否会指向字符“b”或“b”旁边的位置?
您不指定版本,Python 2 和 Python 3 之间的文件对象行为略有不同。总体思路是相同的,但一些具体细节有所不同。以下假设您使用的是 Python 3,或者您使用的是ioPython 2.6 或 2.7 中模块的 open 版本,而不是 Python 2 的内置版本open。
它不是一个文件指针,尽管它很可能是在幕后实现的。与 C 不同,Python 不公开指针的概念。
然而,您似乎想到的是“流位置”,它有点类似于指针。这是由 报告的数字tell(),可以将其输入seek()。对于二进制文件,它是距文件开头的字节偏移量。在文本文件中,它只是对文件对象有意义的“偏移量” - 文档将其称为“不透明数字”(即,就文件如何存储在磁盘上而言,它没有定义的物理含义)。但在这两种情况下,它都是相对于起点的偏移,因此起点为零。仅当文件支持随机访问时(您通常会支持随机访问),这才是正确的,但要准备好最终遇到不支持随机访问的情况(在这种情况下),seek并tell引发错误。
与处理器中的指令指针一样,流位置是下一个操作的开始位置,而不是当前操作的结束位置。所以,是的,在将字符串写入文件后,当前位置通常是该位置之后的一个偏移值。
当您刚刚打开一个文件时,偏移量通常为零或文件末尾(比您可以在没有 EOF 的情况下读取的最大值高一个)。如果您在“r”模式下打开它,它将为零,如果您在“a”模式下打开它,则结束,并且这两个模式对于“w”和“w+”模式是等效的,因为它们会将文件截断为零字节。