今回はpythonでのファイルの開き方を説明していきます。
主に2種類(“with”と”open”/”close”)ありますが、
私は断然 “with” を多用します。
このwithのメリットもお伝えしようと思います。
1. with でファイルを開く【簡単・オススメ】
with の使い方
まず、with の使い方です。
with open('ファイルのパス') as 変数:
# ここでファイルの処理を行う
#インデントが戻ったら、ファイル処理は終了
with open('/sample.txt') as f:
print(f)
#<_io.TextIOWrapper name='./sample.txt' mode='r' encoding='UTF-8'>
with open で開き、パスを通して、as で変数を設定する。
その後、インデントを空けてファイルの処理を書く。
ファイルの処理が終わったらインデントを戻す。
これが with の使い方です。ここからより詳細な使い方になります。
絶対パス・相対パス
ファイルを開くためにはファイルへのパスを通す必要があります。
パスの通し方には2通り、「絶対パス」と「相対パス」です。
絶対パスは以下のようなものです。
with open('/Users/username/Desktop/file/sample.txt') as f:
絶対パスはファイルのプロパティや情報を見た時に出てくるファイルの場所のことです。
開きたいファイルがどの場所かわからない場合はプロパティを見るといいです。
相対パスは以下のようなものです。
with open('../sample.txt') as f:
相対パスは python を実行している階層を起点に考えます。
” .. / XX” のような上の階層に行く手段を活用していきましょう。
エンコーディング
PC上に保存されるファイルはPCが読めるようになっていて
人が読めるようにはなっていないです。
そのための人が読めるようにエンコードをします。
そのため、単純に開いても読めなかったらエンコーディングを疑ってみましょう。
with open('/sample.txt', encoding='uft-8') as f:
エンコーディングの種類としては多々ありますが、
pythonの場合は、uft-8を覚えておけばOKです。
ファイルを開くモード
ファイルを開くモードは目的によって異なります。
モード | 目的 |
r | 読み込み |
w | 新規作成して書き込み |
a | 追加の書き込み |
r+ | 読み込み・最初の行から書きコミ |
w+ | 新規作成して書き込み読み込み |
a+ | 追加の書き込み・新規作成して読みこみ |
多用するモードとしては、’ r ‘、’ w ‘、’ a ‘ ぐらいでしょう。
他のモードは読み書きはできますが、複雑になるため注意です。
使い方は以下のようなものです。
with open('/sample.txt', mode='r') as f:
サンプル
サンプルとして一例あげます。
pythonの公式サイトから引用し改変したものです。
with open('/sample_a.txt', mode='r') as a:
with open('/sample_b.txt', mode='w') as b:
a_read = a.read()
b_write = b.write(a_read)
sample_a.txt の内容を読み込んで、sample_b.txt に書き込む内容です。
2. open/close でファイルを開く
open / close の使い方
open / close の使い方です。
f = open(/sample.txt)
print(f)
#<_io.TextIOWrapper name='./sample.txt' mode='r' encoding='UTF-8'>
f.close()
open で開くことは with と変わりませんが、
インデントを入れないことと close () で閉めることは異なります。
close() を入れないと気づかぬうちにエラーが発生したり
ファイルが開きっぱなしで、データを書き換えてしまったりと
問題が発生しやすくなるため、close() は必須になります。
そう考えると、with を使った方が close() を使う必要ないため簡単ですね。
また、他の絶対パスや相対パス、エンコーディング、モードに関しても
with と同じ使い方をします。特別なことはないです。
サンプル
with と同様の内容を書きました。
sample_a.txt の内容を読み込んで、sample_b.txt に書き込む内容です。
a = open('/sample_a.txt', mode='r')
b = open('/sample_b.txt', mode='w')
a_read = a.read()
b_write = b.write(a_read)
a.close()
b.close()
やはり with を使った方が簡単な気もしますね。
まとめ
以上がPythonのwith/open/closeの使い方でした。
好きな使い方をしてみてください!