【问题标题】:Read specific bytes of file in python在python中读取文件的特定字节
【发布时间】:2015-03-31 19:06:16
【问题描述】:

我想指定一个偏移量,然后像

这样读取文件的字节
offset = 5
read(5) 

然后阅读接下来的 6-10 等。我阅读了有关 seek 但我无法理解它是如何工作的,并且示例描述性不够。

seek(offset,1) 返回什么?

谢谢

【问题讨论】:

  • 提示:确保打开文件进行二进制访问,例如:open(filename, 'rb')

标签: python seek


【解决方案1】:

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() 返回的偏移量是合法的。使用其他偏移导致 未定义的行为。 请注意,并非所有文件对象都是可查找的。

【讨论】:

    【解决方案2】:

    只需使用 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'
    

    【讨论】:

    • while True: fo.seek(offset,1) b = fo.read() print b 通过这样做 b 打印除第一个“偏移”字节之外的所有字节......我只是困惑...
    • OP 未指定从何处计算偏移量。如果它是文件的开头,它应该是f.seek(6, 0) 或只是f.seek(6)。在这里它不会有任何区别,因为打开文件没有中间读取来更改当前流位置。由于 OP 想要偏移 6 之后的下五个字符,因此读取可能应该是 f.read(5)
    【解决方案3】:

    seek 不会返回任何有用的信息。它只是将内部文件指针移动到给定的偏移量。下一次读取将从该指针开始读取。

    【讨论】:

    • 嗯,它应该返回None:P
    • seek() 返回它现在在文件中指向的索引。如果您将 o 指向超出文件长度或使用相对 seek() 命令,这也很有用。
    猜你喜欢
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 2021-10-28
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多