【Python】ファイル操作 読み込み【基本講座】
Pythonにおけるファイル操作を勉強していきましょう。プログラミングにおいて、数値計算も重要ですが、やはりファイルの入出力は実務でも頻出の超重要項目です。まずは、ファイルを開いて読み込むところから見ていきましょう。
Pythonでファイル操作をしよう!~読み込み編
open()関数
Pythonのファイル操作で頻繁に使うものと言えば、ファイルを開くopen()関数でしょう。書式は次のように書きます。
open(【ファイル】,【モード】,【エンコーディング】)
【ファイル】:開きたいファイル名+パス
例)hoge/sample/test.txt
【モード】ファイルを開くモードを指定します。
文字 | 意味 |
‘r’ | 読み込み用に開く (デフォルト) |
‘w’ | 書き込み用に開き、まずファイルを切り詰める |
‘x’ | 排他的な生成に開き、ファイルが存在する場合は失敗する |
‘a’ | 書き込み用に開き、ファイルが存在する場合は末尾に追記する |
‘b’ | バイナリモード |
‘t’ | テキストモード (デフォルト) |
‘+’ | open for updating (reading and writing) |
【エンコーディング】:文字エンコーディングを指定します。
例)encoding=”utf_8″
キーワード引数で指定します。なお、デフォルトでutf_8になっています。
これらを踏まえると
1 |
f = open("sample.txt", "r", encoding="utf_8") |
という感じで書くことができます。
また、ファイルが開かれるとファイルオブジェクトメソッドを使用してファイル操作できます。代表的な3つのreadメソッドを紹介します。
メソッド | 説明 |
read() | ファイル全体をまとめて文字列として読み込む |
readlines() | ファイルの各行をリストの要素として読み込む |
readline() | ファイルを1行ずつ文字列として読み込む |
read()メソッド
read(【サイズ】)の中には、ファイルから指定サイズのデータを読み込むことができます。指定しない場合は、すべてのデータを読み込むことができます。
たとえば、
1 2 |
f = open("test.txt", "r", encoding="utf_8") l = f.read(2) |
とすると、openしたテキストファイルの最初の2文字だけ読み込むことになります。
これ以降、さらにf.read(2)するとさらに次の2文字を読み込むことになります。
readlines()メソッド
read()メソッドは、ファイル全体を読み込んで各行を要素とするリストとして戻しました。readlines()メソッドもread()メソッドと同じで、readlines(【サイズ】)の中には、ファイルから指定サイズのデータを読み込むことができます。指定しない場合は、すべてのデータを読み込むことができます。各行の終わりには、改行コードが付加されます。
そのため、改行コードが不要な時は、取り除いてやる必要があります。
方法は2通りあります。
1 2 |
# rstrip()メソッドで改行コードを取り除く print("{:4d}:{}".format(i+1, line.rstrip("\n"))) |
1 2 |
# キーワード引数「end=""」で改行コードを取り除く print("{:4d}:{}".format(i+1, line), end="") |
readline()メソッド
readline()メソッドは、ファイルから1行ずつ読み込むメソッドです。
実践的には、read()やreadlines()のようにファイルを一度にまとめて読み込むことの方が多いかもしれませんが、例えば、ファイルのデータを一行ずつ表示するプログラムを書くとき、このreadline()メソッドを使う方が効率的だと思います。
for文で1行ずつ取り出す
readline()メソッドは1行ずつ読み込むことができましたが、その行を取り出すとき、for文でも取り出すことができます。
例えば、enumerate()関数を使用すれば、行番号と行内容を取り出すことも可能です。
1 2 3 4 5 6 |
f = open("test.txt", "r", encoding="utf_8") for i, line in enumerate(f): print("{:4d}: {}".format(i + 1, line.rstrip("¥n"))) f.close() |
close()関数
ファイルを使い終わったらclose()メソッドで閉じます。
1 2 3 4 5 6 7 |
f = open("sample.txt", "r", encoding="utf_8") lines = f.read() print(lines) f.close() |
このように使います。
closeしないとどうなるのか?
以下の2パターンが想定されます。
- openしているファイルをcloseしていないのなら。
長時間実行するプログラムやファイルをどんどんオープンするプログラムを実行していた場合、リソースの使用量、つまりメモリやプロセスからオープン可能なファイル数の上限でフリーズしてしまうでしょう。 - writeファイルをcloseしていなのなら。
まだ書き込まれていないデータがライブラリのバッファ上に残っているかもしれないので、その段階でOSごと落ちたり、プロセスが強制終了されたりすると、まだ書き込まれていないデータが失われるだろう。
with文が優秀な件
close()メソッドを見てきて、何だか忘れそうで嫌だなとか思いましたか?
ガーベージコレクションを持ってないプログラム言語、C言語とかならメモリを確保したら必ず解放した記憶ありませんか?実はそれと同じ感じですが、複雑なプロジェクトになるとやはりヒューマンエラーが出てしまうかもしれませんね。
そこで知ってほしい構文があります。With文です。
with open(【ファイル】) as ファイルオブジェクト:
ファイル操作
上記のように操作をするとブロックを抜けたときに自動的にclose()メソッドが呼ばれます。
こんな感じで書けます。
1 2 3 4 5 |
with open("sample.txt", "r", encoding="utf_8") as f: lines = f.read() print(lines) |
Pythonおすすめ書籍
最初の2冊は初心者向けです。Effectiv Pythonはこの2冊を終えてから読むとかなりわかりやすく感動できると思います。
|
|
|