Pythonでファイルを読み込む方法!(read, readline)

PythonPython

Pythonでファイルを読み込む方法について書いています。
取得したファイルオブジェクトを使って、下記のメソッドや構文でファイルを読み込んでみました。

・readメソッド
・readlineメソッド
・for文
・readlinesメソッド

載せているサンプルコードはPythonのバージョン3.10.5で動作検証しました。

readメソッドでテキストファイルを読み込む

Pythonでファイルを読み込むときには、まずopen関数を使ってファイルにアクセスします。
その後に受け取ったファイルオブジェクトから、readメソッドを呼ぶことにより、ファイルの内容を取得できます。

例えば、下記のように読み込むことができます。

file = open("hello.txt")
print(file.read())
file.close()

最初にopen関数に読み込みたいファイルのパスを渡しています。
指定したパスにファイルがあると、ファイルオブジェクトを返してくれるので、file変数でファイルオブジェクトを受け取っています。

file変数(ファイルオブジェクト)からreadメソッドを呼ぶことにより、ファイルの内容を取得しています。
そして、取得した内容をprint関数で出力しました。

最後にfile変数からcloseメソッドを呼ぶことで、明示的にファイルを閉じています。
不要なリソースの消費を抑えるためにも、open関数でファイルを開いたらclose関数で閉じるようにしておきましょう。

実行すると、指定したファイルパス(“hello.txt”)のファイルの内容を取得して、そのまま表示してくれます。

ファイルパスは相対パスか絶対パスを指定する

指定するファイルパスはプログラムを実行するカレントディレクトリからのパスになります。
相対パスで指定する場合は、同じ場所にファイルがあれば、そのファイルを指定します。

file = open("hello.txt")

絶対パスで指定する場合は下記のように、ルートからことが可能です。

file = open("/Users/yasuaki/test/hello.txt")

Windowsで絶対値を指定する場合は、ドライブから指定すると良いです。

file = open("C:\\yasuaki\test\hello.txt")

ファイルが見つからない場合は?

ファイルが見つからない場合は、下記のようなエラーが表示されます。

FileNotFoundError: [Errno 2] No such file or directory

動的にファイルパスが変わるような場合など、ファイルが見つからないことが想定されるときには例外処理を書いておくと良いです。
下記のように例外処理を書いておくことで、例外でFileNotFoundErrorが発生した場合には、その配下の処理をしてくれるようになります。

try:
    file = open("test.txt")
    print(file.read())
    file.close()
except FileNotFoundError:
    print("ファイルが開けませんでした")

readlineメソッドで1行ずつ読み込む

readメソッドを呼び出したときにはファイルの内容が全て読み込まれました。
1行ずつファイルを読み込みたい場合には、readlineメソッドを使います。

例えば、下記のようにすると、1行ずつ読み込むことが可能です。

file = open("hello.txt")
print("1行目 => " + file.readline(), end="")
print("2行目 => " + file.readline(), end="")
print("3行目 => " + file.readline(), end="")
file.close()

最初にopen関数を使って、読み込んだ内容をfile変数に代入しています。

次の行からreadlineメソッドを呼んでいます。
readlineメソッドを呼ぶと、ファイルの先頭から1行ずつ、readlineメソッドを呼ぶたびに返してくれます。

今回は行数と一緒にファイルの内容を1行ずつ出力しました。
print関数にend=""を指定しているのは、ファイルに改行文字があるので、print関数で改行しないようにしています。

ファイルの内容を読み終わったときには?

ファイルの内容を読み終わると、readlineメソッドは空文字(”)を返します。
最後まで読み終わったかは、空文字が返ってきているかで判定できます。

# --- 省略 ---
print("3行目 => " + file.readline(), end="")
if file.readline() == "":
    print("空になりました。")
file.close()

動作確認

下記のファイルを、先ほどのプログラムで読み込ませて、動かしてみます。

Hello, World!
Pythonでファイル読み込み
テストファイルです

そうすると、このように行数と一緒にファイルの内容が出力されました。

1行目 => Hello, World!
2行目 => Pythonでファイル読み込み
3行目 => テストファイルです

for文で1行ずつ読み込む

for文を使って、1行ずつ読み込むこともできます。
例えば、下記のように使います。

file = open("hello.txt")
number = 1
for content in file:
    print(str(number) + '行目: ' + content, end="")
    number += 1
file.close()

最初にopen関数でファイルオブジェクトを取得しています。
その次の行で、行番号として使うためのnumber変数を作りました。

そして、for文でfile変数(ファイルオブジェクト)を指定しています。
ファイルの最後までループして、content変数に1行ずつファイルの内容を読み込んでくれます。

for文の配下では、print関数を使ってnumberで行番号と、ファイルの内容を表示しました。
表示した後にはnumber変数をカウントアップしています。

動作確認

先ほどと同じように、下記のファイルを使ってプログラムを実行してみます。

Hello, World!
Pythonでファイル読み込み
テストファイルです

そうすると、このように1行ずつ読み込まれて表示されました。

1行目: Hello, World!
2行目: Pythonでファイル読み込み
3行目: テストファイルです

readlinesメソッドでリストとして読み込む

readlineメソッドは1行ずつ読み込みましたが、readlinesメソッドを使うと、全ての行をリストに読み込みます。
例えば、下記のようにすると、リストにファイル内容を読み込むことができます。

file = open("hello.txt")
contents = file.readlines()
print(contents)
file.close()

最初にopen関数でファイルオブジェクトを取得しています。

その次の行で、file変数(ファイルオブジェクト)からreadlinesメソッドを呼び出しています。
こうすると、ファイルの内容をリストにして返してくれます。

contents変数でリストを受け取って、次の行でprint関数で出力しています。
最後にファイルをcloseメソッドで閉じて、処理を終了します。

動作確認

先ほどと同じように、下記のファイルを使ってプログラムを実行してみます。

Hello, World!
Pythonでファイル読み込み
テストファイルです

そうすると、下記のようにリストになっていることが確認できました。

['Hello, World!\n', 'Pythonでファイル読み込み\n', 'テストファイルです']

おわりに

今回はPythonでファイルを読み込んでみました。
open関数で開いた後に、readやreadlineメソッドを使って、ファイル読み込みの流れを書きました。
要点だけまとめると下記のようになります。

1. ファイル読み込みの流れとしては、open関数でファイルオブジェクトを受け取ります。
2. ファイルオブジェクトからファイルの内容を取得して処理します。
3. 最後にcloseメソッドでファイルを閉じて終了します。

open関数については公式ドキュメントのこちらに記載がありました。
入出力についても、公式ドキュメントのこちらに書いてあるので、詳細を確認したい方は参照してみてください。

コメント

タイトルとURLをコピーしました