ここで私の混乱を許してください、しかし私はPythonのseek()関数に関するドキュメントを読みました(それを使用しなければならなかった後)そしてそれは私を助けましたがそれが何をするのか実際の意味についてはまだ少し混乱しています、どんな説明もたくさんありますよろしくお願いします。
4 に答える
心配seek()
することはあまりありません。
まず、開いているファイルを操作するときに便利です。
その構文は次のとおりであることに注意することが重要です。
fp.seek(offset, from_what)
fp
作業しているファイルポインタはどこにありますか。offset
移動するポジションの数を意味します。from_what
参照ポイントを定義します。
- 0:参照ポイントがファイルの先頭であることを意味します
- 1:参照ポイントが現在のファイル位置であることを意味します
- 2:参照ポイントがファイルの終わりであることを意味します
省略した場合、from_what
デフォルトは0です。
ファイルを管理するときは、そのファイル内に現在作業している位置が常に存在することを忘れないでください。開いたばかりのときは、その位置がファイルの先頭になりますが、作業しながら進むことができます。開いているファイルに沿って移動する必要がある場合は、移動先のパスと同じよう
seek
に役立ちます。walk
ファイルを開くと、システムはファイルの先頭を指します。読み取りまたは書き込みはすべて最初から行われます。操作により、そのseek()
ポインタがファイルの他の部分に移動し、その場所で読み取りまたは書き込みができるようになります。
したがって、ファイル全体を読み取りたいが最初の20バイトをスキップする場合は、ファイルを開き、seek(20)
読み取りを開始する場所に移動してから、ファイルの読み取りを続行します。
または、10バイトごとに読み取りたい場合は、(seek(9, 1)
現在の位置に対して9バイト前方に移動)、read(1)
(1バイトを読み取る)、繰り返すループを作成できます。
関数はバイト単位のオフセットを期待しseek
ます。
アスキーファイルの例:
したがって、次の内容のテキストファイルがある場合:
simple.txt
abc
次のように、 1バイトジャンプして最初の文字をスキップできます。
fp = open('simple.txt', 'r')
fp.seek(1)
print fp.readline()
>>> bc
バイナリファイルの例の収集幅:
fp = open('afile.png', 'rb')
fp.seek(16)
print 'width: {0}'.format(struct.unpack('>i', fp.read(4))[0])
print 'height: ', struct.unpack('>i', fp.read(4))[0]
注:電話をかける
read
と、リードヘッドの位置が変更されます。これはのように機能しseek
ます。
文字列の場合は、WHENCEの使用を忘れてください。ファイルの先頭に配置するにはf.seek(0)を使用し、ファイルの末尾に配置するにはf.seek(len(f)+1)を使用します。open(file、 "r +")を使用して、ファイル内の任意の場所で読み取り/書き込みを行います。「a+」を使用すると、カーソルの位置に関係なく、ファイルの最後にのみ書き込む(追加する)ことができます。