web-dev-qa-db-ja.com

pythonでファイルの特定のバイトを読み取ります

オフセットを指定して、次のようなファイルのバイトを読み取りたい

_offset = 5
read(5) 
_

次に、次の6〜10などを読みます。seekについて読みましたが、それがどのように機能するのか理解できず、例は十分に説明的ではありません。

seek(offset,1)は何を返しますか?

ありがとう

8
user3124171

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'
6
Santa

seekの2番目のパラメーターの値は、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

ヘルプを確認できることを忘れないでください-

 >>> help(file.seek)
 method_descriptorのヘルプ:
 
 seek(...)
 seek(offset [、whence ])->なし。新しいファイル位置に移動します。
 
引数offsetはバイトカウントです。デフォルトのオプションの引数は
 0(ファイルの先頭からのオフセット、オフセットは> = 0である必要があります)。他の値は、1 
(現在の位置に対して移動、正または負)、および2(ファイルの終わりに対して移動
、通常は負ですが、多くのプラットフォームでは
を超えてシークできます)ファイルの終わり)。ファイルがテキストモードで開かれている場合、
 tell()によって返されるオフセットのみが有効です。他のオフセットを使用すると、
未定義の動作が発生します。
すべてのファイルオブジェクトがシーク可能であるとは限らないことに注意してください。
5
Brian Burns

seekは有用なものを返しません。内部ファイルポインタを指定されたオフセットに移動するだけです。次の読み取りは、そのポインタから読み取りを開始します。

3
Bryan Oakley