Select Language

AI Technology Community

5.8、Python seek()関数:読み書き位置の設定

seek() 関数を使用して、現在のファイルの読み書き位置を調整することができます。例えば、ファイルの先頭から 1000 バイトを読み取り、この 1000 バイトを処理した後、ファイルの 3 バイト目に非常に重要な情報があることがわかった場合、現在の位置を先頭から 3 バイトの位置に移動することができます。これにより、次の read() 操作で希望する情報を取得することができます。

この関数には 2 つのパラメータがあります。最初のパラメータは offset で、オフセットを表し、負の値にすることもできます。2 番目のパラメータは whence で、基準位置を表し、ファイルの先頭、ファイルの末尾、現在のファイル位置を指定することができます。whence のデフォルト値は 0 で、ファイルの先頭を表し、1 は現在の位置、2 はファイルの末尾を表します。

以下の例では、ファイルを開き、現在の位置を末尾から 2 文字前に移動します。これにより、次に読み取られるのはファイルの最後の 2 文字になります。このファイルの最後の 2 文字は yz です。ここで注意する必要があるのは、ファイルをバイナリモードで開かないと、seek() は例外をスローすることです。以下は完全なコードです:

try:
    # ファイルをバイナリモードで開く必要があるため、b を付けます
    file_obj1 = open(u"data.txt", "rb")
    pos = file_obj1.tell()
    print(u"1)現在の位置は%dです" % pos)
    file_obj1.seek(-2, 2)
    print(u"2)現在の位置は%dです" % pos)
    data = file_obj1.read(2)
    print(u"%d バイトを読み取りました" % len(data))
    print("data = [%s]" % str(data))
    pos = file_obj1.tell()
    print(u"3)現在の位置は%dです" % pos)
    file_obj1.close()
except IOError:
   # ファイルが見つからない場合、ファイルが存在しないことを表示します
   print(u"ファイルが存在しません")

このプログラムを実行すると、次の出力結果が得られます:

E:\>python seekDemo1.py
1)現在の位置は0です
2)現在の位置は0です
2 バイトを読み取りました
data = [b'yz']
3)現在の位置は26です


以下の例では、tell() と seek() を使用して、あるファイルのバイト数を取得します。その方法は、ファイルの先頭の位置情報 start_pos と末尾の位置情報 stop_pos を取得し、stop_pos - start_pos の値を求めることでファイルのサイズを取得することです。コードは次の通りです:

try:
    file_obj1 = open(u"data.txt", "rb")
    file_obj1.seek(0, 2)
    end_pos = file_obj1.tell()
    print(u"ファイルのサイズは%dバイトです" % end_pos)
    file_obj1.close()
except IOError:
    # ファイルが見つからない場合、ファイルが存在しないことを表示します
    print(u"ファイルが存在しません")


post
  • 14

    item of content
データを長期的に保存したい場合、最も簡単な方法はデータをディスクファイルに書き込むことです。これにより、プログラムを終了した後でも処理結果は長期的に有効です。
大規模ソフトウェアプロジェクトでは、ファイル操作は避けられません。この章では、普通のテキストファイルとバイナリファイルの操作方法について説明します。具体的には、ファイルを開く方法、ファイルの読み書き、ファイルモード、および with 文の使用方法などを含みます。