withステートメントとopen関数を利用したファイル操作のイメージ画像

withステートメントとopen関数を利用したファイル操作

  • 公開日:2019/01/12
  • 更新日:2019/01/12
  • 投稿者:n bit

Pythonでwithステートメントとopen関数を合わせて利用する方法の学習です。クローズ処理をなくしコードを簡潔にしてミスを減らすことができます。

  • Python

この記事は約 分で読めます。(文字)

withステートメントとは

withステートメントは以前学習したopen関数によるファイル操作のように『開始処理』と『終了処理』が必ずセットになってている様な場合に終了処理を自動的に行ってくれるものです。

open関数を使ったファイル処理以外にも『データ通信の開始と終了』、『データーベースへの書き込みの開始と終了』など開始終了処理が対になった実行処理で利用することができます。

withステートメントとopen関数を使ったファイル操作の方法

それではwithステートメントとopen関数を使ったファイル操作方法を解説していきましょう。

まずは復習です。open関数だけを使ってファイルの作成、書き込み、クローズ迄の1連のコードは以下のようになっていました。

f = open('test.txt', 'w', encoding='utf-8')

f.write('入力したい文章')
f.close()

open関数を使った1連の流れを詳しく復習したい方は下記のページをご参照下さい。

これをwithステートメントを使って書き換えたのが以下のコードです。

with open('test4.txt', 'w', encoding='utf-8') as f:

f.write('入力したい文章')

コードがとてもシンプルになりましたね。そしてクローズ処理がなくなっていることがわかります。

1度実行してみて新規ファイル『test.txt』が作成されることを確認しましょう。

open関数で新規ファイル作成

テキストファイルを開くと書き込み用に用意した『入力したい文章』が保存されていることが確認できます。

open関数で新規ファイル作成内容

それでは1行ずつ詳しくコードを見ていきましょう。

withステートメントopen関数を使った新規ファイルを作成

基本的な新規ファイルの作成コードはopen関数だけを使う時とほぼ同じです。行頭にwithステートメントが来ますので変数(インスタンス名)の指定が『as』を使って行末に移動します。

open関数を使った新規ファイルの作成は下記のようにコマンド入力します。

  • with open(ファイル名, モード、エンコーディング) as 変数名:
with open('test.txt', 'w', encoding='utf-8') as f:

ファイル名の指定

open関数の引数には最初に新規作成するファイルのファイル名を指定します。ファイル名は『test.txt』の様に拡張子まで入力しましょう。

ファイルの開き方のモード指定

2つ目の引数『w』はファイルの開き方のモード指定です。open関数に用意されているモード一覧は下記の表をご参照ください。

モード
説明
'w' 書き込み用に開き、既存ファイルがある場合は上書き
'a' 書き込み用に開き、既存ファイルがある場合は末尾に追記
'x' 書き込み用に開き、既存ファイルがある場合はエラー『FileExistsError』
'r' 読み込み用に開く
'+' 更新用に開き、 読み書き両方を指定
't' テキストモード
'b' バイナリモード
'U' ユニバーサル改行モード (非推奨)

書き込みモード『w』に指定することで既存ファイルがない場合は新規のファイルが自動的に作成されます。もし既にファイルが存在していた場合は上書きされます。

エンコーディング指定(encoding)

3つ目の引数はエンコーディングを指定します。必須ではありませんが後々の操作でファイルのエンコーディング判別をしやすくしトラブルを少なくするため普段からエンコーディングを指定しておくのがお勧めです。

今回の指定エンコーディングは『utf-8』。

書き込み作業をこの後行うためopen関数を変数に渡してファイルオブジェクトとしてインスタンス化しています。

ファイルの書き込み処理

ファイルの書き込み処理についてはopen関数の時と全く同じです。『as』で指定したインスタンス名にwriteメソッドをつけて引数に書き込みたいテキストを渡します。

『withステートメント』を利用したときにはそれ以降の行がすべてインデントされていることに注意しましょう。インデントされた行が終了した時点で自動的にクローズ処理が実行されています。

	f.write('入力したい文章')

今日のdot

『withステートメント』を利用したopen関数のファイル操作はこの様にとても簡単です。以前学習したopen関数に比べてclose処理を省いた記述を行うことができ、コードの記述量を減らし書き忘れミスもなくなりますので通常の利用時には『withステートメント』を使った書き方を利用しましょう。