Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでファイル位置を取得・移動する方法(tell()とseek()の使い方)

Pythonにおけるファイル位置の操作とは

Pythonでは、開いたファイルの中で「次に読み書きが行われる位置」(ファイルポインタ)を確認したり、自由に移動させたりすることができます。これを実現するのが、tell() メソッドと seek() メソッドです。本記事では、それぞれの役割と具体的な使い方をサンプルコード付きで解説します。

tell() メソッド ― 現在の位置を取得する

tell() メソッドは、ファイル内の現在の位置を返します。つまり、次に読み込みまたは書き込みが行われるのが、ファイルの先頭から何バイト目なのかを教えてくれます。

seek() メソッド ― ファイル位置を移動する

seek(offset[, from]) メソッドを使うと、現在のファイル位置を任意の場所へ変更できます。

  • offset:移動させるバイト数を指定します。
  • from:移動の基準となる参照位置を指定します。

from 引数に指定できる値は以下の通りです。

  • 0:ファイルの先頭を基準位置として扱う
  • 1:現在の位置を基準位置として扱う
  • 2:ファイルの末尾を基準位置として扱う

なお、Python 3ではテキストモードで開いたファイルに対して from に 1 や 2 を指定できるのは offset が 0 の場合のみです。任意のオフセットで移動したい場合は、バイナリモード("rb" など)でファイルを開きましょう。

実行例

それでは、あらかじめ作成しておいた foo.txt を使って、実際の動作を確認してみましょう。

#!/usr/bin/python
# ファイルを読み書き両用モードで開く
fo = open("foo.txt", "r+")
str = fo.read(10)
print("読み込んだ文字列 : ", str)

# 現在のファイル位置を確認
position = fo.tell()
print("現在のファイル位置 : ", position)

# ポインタを再び先頭に戻す
position = fo.seek(0, 0)
str = fo.read(10)
print("再度読み込んだ文字列 : ", str)

# 開いたファイルを閉じる
fo.close()

このコードを実行すると、以下のような結果が出力されます。

読み込んだ文字列 :  Python is
現在のファイル位置 :  10
再度読み込んだ文字列 :  Python is

処理の流れを解説

  1. read(10) で最初の10バイト分の文字列「Python is」を読み込みます。
  2. tell() を呼び出すと「10」が返され、読み込み後にポインタが先頭から10バイト目へ進んでいることがわかります。
  3. seek(0, 0) でポインタをファイルの先頭に戻し、もう一度同じ部分を読み込むと、同じ文字列が取得できます。
  4. 最後に close() でファイルを閉じてリソースを解放します。

このように、tell()seek() を組み合わせれば、大きなファイルの一部だけを繰り返し読み込むなど、柔軟なファイル操作が可能になります。

  1. 【Python】ジャンクファイルオーガナイザーで面倒なファイル整理を一括自動化

    はじめに 大量のファイルやフォルダをひとつのディレクトリに放り込みっぱなしにして、「何のファイルがあったんだっけ?」と混乱しがちなPythonプログラマーは少なくありません。そんな「怠惰(=効率重視)」な開発者にとって、手作業でのファイル整理は面倒この上ないものです。 そこで本記事では、散らかったフォルダ内のファイルを拡張子ごとに適切なフォルダへ一括で振り分け、さらに不要になった空のディレクトリまで削除してくれるPythonスクリプトを紹介します。コマンドひとつでフォルダがすっきり片付くので、ぜひ活用してみてください。 具体的には、さまざまな種類のファイルが混在したディレクトリ(下図)を入力と

  2. Pythonで作るWebサイトブロッカー ― 業務時間中にSNSへのアクセスを自動遮断する方法

    大手IT企業で働いたことがある方なら、FacebookやYouTube、InstagramといったSNS系のWebサイトが社内からアクセスできないよう制限されていることに気づいた経験があるかもしれません。こうした制限は、サードパーティ製アプリに頼らなくても実現できます。自分専用のオリジナルツールを作れば、好きなWebサイトを自由にブロックできるのです。しかもPythonでWebサイトブロッカーを開発するのは、それほど難しいことではありません。この記事では、指定したWebサイトをブロックするPythonスクリプトの作り方を解説します。前提条件Python 3.x がインストールされていることPy