次Pythonのseek関数はどのように機能しますか?私はいくつかのファイルのようなオブジェクトを持っているとした場合は
F = open('abc', 'r')
...
loc = F.tell()
F.seek(loc-10)
何を求めるのか?ファイルの先頭から始まり、loc-10
バイトを読んでいますか?それとも、ちょうど10バイトをバックアップするのに十分なスマートなのでしょうか?
次Pythonのseek関数はどのように機能しますか?私はいくつかのファイルのようなオブジェクトを持っているとした場合は
F = open('abc', 'r')
...
loc = F.tell()
F.seek(loc-10)
何を求めるのか?ファイルの先頭から始まり、loc-10
バイトを読んでいますか?それとも、ちょうど10バイトをバックアップするのに十分なスマートなのでしょうか?
これはOSおよびlibcに固有です。 file.seek()
オペレーションは、実際のOSレベルのファイルに対しては、fseek(3)
Cコールに委任されます。 Python 2.7's docsによると
10バイトをバックアップするには十分にスマートであるべきですが、詳細は実際に使用しているファイルシステム/ OS /ランタイムライブラリに依存していると思います。
10バイトをバックアップするだけの場合は、tell
の必要はありません。
F.seek(-10,1)
これを共有していただきありがとうございます。これは私の例として与えたよりはるかに簡単な実装です。 – jlconlin
:
file.seek(offset[, whence])
)(stdioのfseek関数のように、ファイルの現在位置を設定します。 whence 引数はオプションで、デフォルトはos.SEEK_SETまたは0(絶対ファイル ポジショニング)です。他の値はos.SEEK_CURまたは1(現在の位置 )とos.SEEK_ENDまたは2(ファイルの の末尾を基準にしてシーク)です。
あなたは10のバイトがあなたの位置に対して戻りたいだろうと言う:
file.seek(-10, 1)
はマニュアルに従って、あなたはf.seek(offset, from_what)
、またはあなたのケースで行う必要があり、F.seek(-10, loc)
あなたの例これはもっと明白です
これはかなり誤解を招くことです。この答えは、 'loc'が1の場合にのみ有効です。 – mgilson
このプラットフォームは実装にも依存しますか? – jlconlin
はい、実装はlibcとOSの間で分割されています。 –
これは、ファイルの先頭から開始することなく、これを行うことは可能ですか簡単ですか? – jlconlin