こんにちは。
おぎーです。
先日とあるTwitterアカウントさんがENHANCERの記事を活用してくださったとのツイートをしてくださり、
おぎーはもちろん他のメンバーも嬉しい気持ちでいっぱいでした。
Pythonの学習をスタートしたばかりの方々がより理解しやすい記事の作成を目指し、今後も精進して参ります。
それでは学習を進めていきましょう。
Google Colaboratoryを開いて準備してください。
ファイルの自動終了
前回の記事では、ファイルの書き出しについて学習しました。
記事内で次のようなコードを例として紹介しました。
x = open("x.txt, "w")
x.write("hello, world")
x.close()
こちらのコードは、ファイルを開いて、ファイル内のデータをいじって、
ファイルを閉じるといったものでした。
なぜ最後にファイルを閉じなければならなかったのかは、複数のファイルを開いてしまった場合に、
プログラムが正しく動作しなくなってしまうのを防ぐためでした。
とはいっても、やはり私たちはファイルを閉じるのを忘れてしまいがちなので、
それを防ぐためのプログラムを予め用意しておくとリスクを減らせます。
Pythonでこのようなファイルの閉じ忘れを防止するためのコードでは、
with文を使用します。
with文は、今回の記事ではじめて出てきましたので説明します。
まずwith文でファイルを開くための構文を示します。
#このコードは出力できません
with open([ファイルパス], [モード]) as [変数名]
[コード]
この構文を使用してファイルを開けば、
[コード]の部分が実行されたあとに、
自動的にファイルが閉じられます。
具体的なコード例を見てみましょう。
with open("x.txt","w") as x:
x.write("hello, world")
with文でファイルを開く構文を使用して、
x.txtというファイルをwのモードで開いて、
hello, worldと入力するコードです。
x.txtのファイルにhello, worldが書き込まれたら、
コードが終了するので、
ファイルが自動的に閉じられた状態となります。
便利な構文なので、ぜひ覚えておきましょう。
ファイルの読み込み
ここまでファイルの書き出しについて学習してきましたが、
ここでは、ファイルの読み込む方法について学習します。
早速コードの例を提示します。
with open("x.txt", "r") as x:
print(x.read())
さきほど学習したwith文でファイルを開く構文を使用します。
上のファイルを読み込むコードは、
with open("x.txt","w") as x:
x.write("hello, world")
このコードで、x.txtファイルが作成され、hello, worldが入力されていることが前提となります。
ファイルを読み込むコードでの1行目では、
ファイルを書き出すときのコードと何が違うのかを確認してみてください。
モードが違う以外はすべて一緒ですね。
モードは前回の記事で学習しました。
「r」というモードは、読み込みだけに特化した文字でした。
したがって、ファイルを読み込むのか、それとも書き出すのかは、
モードで操作をコントロールでき、それ以外の構文は変わらないということで覚えておきましょう。
wはwriteだから書き出し、
rはreadだから読み込み、
w+はwriteにプラスだから、書き出し+読み込み、
覚えることができましたか?
2行目では、readメソッドを使用して、ファイル内のデータを出力させています。
ファイルの書き出し・読み込み関連のメソッドもいちいち調べなくてもすぐ書けるようにしておく方がよいです。
日本語の文字列の読み込み
タイトルを読んで何をおっしゃっているのですか?
となりますよね。
しかし、これまでみなさんにお示ししてきたコード例には、日本語の文字列を扱っていませんでした。
もし日本語の文字列が含まれたファイルを読み込みたいと考えてたとすれば、
注意しなければならないことがあります。
これまでご紹介したようなコードの構文をそっくりそのまま使用して日本語の文字列が含まれたファイルを開こうとした場合、
構文は間違っていないのにファイルを読み込めないといった現象が起きるかもしれません。
その理由は、日本語が非アスキー文字という種類の文字であるからです。
英語や数字は、アスキー文字と呼ばれ、このアスキー文字のデータは問題なく読み込むことができます。
一方で、日本語は非アスキー文字であることから、日本語の文字列データを含んだ文字列をそのまま読み込むことはできません。
そのため、ファイルを読み込めるような操作を私たちがしてあげればよいのです。
その操作では、encoding引数というものを使用します。
encoding引数を使用して日本語のファイルを読み込むコードの例を見てみましょう。
with open("y.txt", "w", encoding = "utf-8") as y:
y.write("こんにちは")
with open("y.txt", "r", encoding = "utf-8") as y:
print(y.read())
こちらのコードでは、
encoding = “utf-8“という表記以外は、これまで学習してきた内容と全く同じです。
モード引数の次に、encoding = “utf-8″と入力することで、
日本語のファイルを読み込む際の問題が生じなくなります。
utf-8という文字列は、変換方式のひとつで、
今回の例であれば、非アスキー文字である日本語の文字列データを、
ファイルに保存できる形式に変換しているんだといった認識を持っておけば、
とりあえず良いと思います。
他にもいくつかの変換方式があるので興味のある方は、
インターネットなどで、文字コードというキーワードなどで検索してみてください。
まとめ
今回は、ファイルの自動的な閉じ方と、ファイルの読み込み方について学習しました。
今後の学習においてとても大切な技術なので、ぜひ身に付けてください。
それでは下記の項目がクリアできているか確認して今回の学習を終えましょう。
・ファイルを開いて操作したらその都度閉じなければならないのはなぜ?
・with文を使用したファイルの自動的な閉じ方のコード構文はどんなやつ?
・ファイルの読み込みと書き出しの構文の違いについて説明できる?
・日本語の文字列をデータとして含んだファイルを読み込むにはどうしたらよい?
今回のコードはGitHubの方に載せておきますので、
ぜひ活用してください。
GitHubでの閲覧方法は次の記事を参考にしてください。
それではまた次回お会いしましょう。
おぎー