【发布时间】:2015-03-31 19:06:16
【问题描述】:
我想指定一个偏移量,然后像
这样读取文件的字节offset = 5
read(5)
然后阅读接下来的 6-10 等。我阅读了有关 seek 但我无法理解它是如何工作的,并且示例描述性不够。
seek(offset,1) 返回什么?
谢谢
【问题讨论】:
-
提示:确保打开文件进行二进制访问,例如:
open(filename, 'rb')。
我想指定一个偏移量,然后像
这样读取文件的字节offset = 5
read(5)
然后阅读接下来的 6-10 等。我阅读了有关 seek 但我无法理解它是如何工作的,并且示例描述性不够。
seek(offset,1) 返回什么?
谢谢
【问题讨论】:
open(filename, 'rb')。
seek 的第二个参数的值为 0、1 或 2:
0 - offset is relative to start of file
1 - offset is relative to current position
2 - offset is relative to end of file
记住你可以查看帮助 -
>>> 帮助(文件.seek) 关于method_descriptor的帮助: 寻找(...) 寻找(偏移量 [, wherece])-> 无。移动到新的文件位置。 参数偏移量是字节数。可选参数,默认为 0(从文件开始的偏移量,偏移量应该 >= 0);其他值为 1 (相对于当前位置移动,正或负)和 2(移动 相对于文件结尾,通常为负数,尽管许多平台允许 在文件末尾之外寻找)。如果文件以文本模式打开, 只有tell() 返回的偏移量是合法的。使用其他偏移导致 未定义的行为。 请注意,并非所有文件对象都是可查找的。【讨论】:
只需使用 Python 的 REPL 来亲眼看看:
[...]:/tmp$ cat hello.txt
hello world
[...]:/tmp$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open('hello.txt', 'rb')
>>> f.seek(6, 1) # move the file pointer forward 6 bytes (i.e. to the 'w')
>>> f.read() # read the rest of the file from the current file pointer
'world\n'
【讨论】:
f.seek(6, 0) 或只是f.seek(6)。在这里它不会有任何区别,因为打开文件没有中间读取来更改当前流位置。由于 OP 想要偏移 6 之后的下五个字符,因此读取可能应该是 f.read(5)。
seek 不会返回任何有用的信息。它只是将内部文件指针移动到给定的偏移量。下一次读取将从该指针开始读取。
【讨论】:
None:P