パソコン日記

気づいたこと まとめてみる

Pythonでファイル処理をやってみる(ファイル読み込み)

Pythonでのデータ処理にはファイルの読み込みが必要

Pythonでデータ処理をする際に、ファイルからデータを読み込むことが必ず必要となってきます。今回は、ファイルの読み込みについてまとめてみました 。練習として用いるテキストファイルは既存のものでもいいですし、前回紹介したプログラムで、てきとーに作ってもいいと思います。 また、Pythonでのファイルの読み込みにはread(), readline(), readlines()などの関数が使えますのでそれぞれ紹介していきます。

1-compinfo.hatenablog.com

読み込むtest.txtファイルは分かりやすいように次のような内容のものを用いました。

Hello World!
This is a pen
There are many ramens in Japan

ファイルを読み込む read()

まずread()からtest.txtからファイルを読み込むプログラムを次のように作ってみました。

#!python3
f = open("test.txt","r")
lines = f.read()
print(lines, end="")
f.close()

すると、

Hello World!
This is a pen
There are many ramens in Japan

と表示されました。改行などもそのままで、すべて一つの文字列として読み込まれていることがわかります。

ファイルを読み込む readline()

次にreadline()を使って次のプログラムを実行しました。

#!python3
f = open("test.txt","r")
lines = f.readline()
print(lines, end="")
f.close()

すると、

Hello World!

と表示されました。あれ、一行しか表示されていない、、、 そうです、readline()は一行しか処理しないんです。 そこで挙動を確認するために次のようにしてみました。

#!python3
f = open("test.txt","r")
for i in range(3):
    lines = f.readline()
    print(lines, end="")
f.close()

これを実行するとすべての行が表示されます。 ちょっと使いづらい感ありますね、、、

ファイルを読み込む readlines()

readlines()はファイルをすべて読み込み、一行ごとに区切られたリストが返ってきます。 試しに、次のようなプログラムを書いてみました。

#!python3
f = open("test.txt","r")
lines = f.readlines()
print(lines)
f.close()

すると、

['Hello World!\n', 'This is a pen\n', 'There are many ramens in Japan\n']

と表示されました。行ごとに区切られてリストとなっていますね。 データ処理する際には、もしかしたらこの方法をよく用いるかもしれません。 次のようにリスト内包表記を用いて処理すると、行、単語で区切ることができます。

#!python3
f = open("test.txt","r")
lines = [x.strip().split() for x in f.readlines()]
print(lines)
f.close()

結果は、

[['Hello', 'World!'], ['This', 'is', 'a', 'pen'], ['There', 'are', 'many', 'ramens', 'in', 'Japan']]

となりました。行と単語で区切られています。この操作はまずリスト内包表記でf.readlines()で生成されるリストから要素を一つずつ取り出し、xに代入します。その後、sprit()で改行文字が取り除かれ、strip()で空白文字で区切られリストが作られます。 自分の経験的に、最初に読み込んでしまうこの操作を結構使っている感じがあります。

他の書き方 for line in open()

Pythonでは次のような書き方がよくされます。

#!python3
for line in open("test.txt","r"):
    print(line, end="")

結果は

Hello World!
This is a pen
There are many ramens in Japan

となり、非常に簡単に書くことができます。 様々なファイルの読み込み方があるので、必要に応じて使い分けていくことが必要です。