ファイルのようなオブジェクトがあり、次の操作を行うとします。
F = open('abc', 'r')
...
loc = F.tell()
F.seek(loc-10)
シークは何をしますか? ファイルの先頭から開始し、loc-10
バイトを読み取りますか? それとも、10バイトをバックアップするだけで十分スマートですか?
これは OS および libc 固有です。操作は、実際の OS レベルのファイルに対する C 呼び出しにfile.seek()
委譲されます。fseek(3)
Python 2.7のドキュメントによると:
file.seek(offset[, whence])
stdio の fseek() のように、ファイルの現在位置を設定します。whence 引数はオプションで、デフォルトは os.SEEK_SET または 0 (絶対ファイル位置) です。その他の値は、os.SEEK_CUR または 1 (現在の位置から相対的にシーク) および os.SEEK_END または 2 (ファイルの終わりから相対的にシーク) です。
現在の位置から 10 バイト戻りたいとします。
file.seek(-10, 1)
10 バイトをバックアップするのに十分スマートなはずですが、詳細は実際に使用しているファイルシステム/OS/ランタイム ライブラリに依存すると思います。
10 バイトだけバックアップする場合は、tell
.
F.seek(-10,1)
ドキュメントによると、あなたがする必要がf.seek(offset, from_what)
あるか、あなたの場合は、F.seek(-10, loc)
あなたの例はうまくいくはずですが、これはより明示的です