146

请原谅我在这里的困惑,但我已经阅读了关于 python 中的 seek() 函数的文档(在不得不使用它之后),虽然它帮助了我,但我仍然对它的实际含义有点困惑,任何解释都很多感谢,谢谢。

4

4 回答 4

257

关于seek()没有太多的担心。

首先,它在对打开的文件进行操作时很有用。

需要注意的是,它的语法如下:

fp.seek(offset, from_what)

fp您正在使用的文件指针在哪里;offset表示您将移动多少个位置;from_what定义您的参考点:

  • 0:表示您的参考点是文件的开头
  • 1:表示您的参考点是当前文件位置
  • 2:表示您的参考点是文件的结尾

如果省略,则from_what默认为 0。

永远不要忘记,在管理文件时,该文件中总会有一个您当前正在处理的位置。刚打开时,该位置是文件的开头,但是当您使用它时,您可能会前进。
seek当您需要walk沿着该打开的文件移动时,它将对您有用,就像您要进入的路径一样。

于 2012-07-27T22:38:48.347 回答
47

打开文件时,系统会指向文件的开头。您所做的任何读取或写入操作都会从一开始就发生。一个seek()操作将该指针移动到文件的其他部分,以便您可以在该位置读取或写入。

因此,如果您想读取整个文件但跳过前 20 个字节,请打开文件,seek(20)移动到要开始读取的位置,然后继续读取文件。

或者说您想每 10 个字节读取一次,您可以编写一个循环来执行seek(9, 1)(相对于当前位置向前移动 9 个字节),read(1)(读取一个字节),重复。

于 2012-07-27T22:34:39.023 回答
3

seek函数 expect是以字节为单位的偏移量。

Ascii 文件示例:

因此,如果您有一个包含以下内容的文本文件:

简单的.txt

abc

您可以跳转1 个字节以跳过第一个字符,如下所示:

fp = open('simple.txt', 'r')
fp.seek(1)
print fp.readline()
>>> bc

二进制文件示例收集宽度:

fp = open('afile.png', 'rb')
fp.seek(16)
print 'width: {0}'.format(struct.unpack('>i', fp.read(4))[0])
print 'height: ', struct.unpack('>i', fp.read(4))[0]

注意:一旦您调用read,您将更改读取头的位置,其行为类似于seek.

于 2018-08-10T23:24:44.300 回答
2

对于字符串,忘记使用 WHENCE:使用 f.seek(0) 定位到文件的开头,使用 f.seek(len(f)+1) 定位到文件的末尾。使用 open(file, "r+") 读取/写入文件中的任何位置。如果您使用“a+”,则无论您将光标放在哪里,您都只能在文件末尾写入(追加)。

于 2019-11-10T20:55:37.563 回答