Python入門:ファイル操作
ファイル操作
プログラム内のデータをファイルに保存したい場合や、ファイルの内容を読み取りたいときにファイル操作を行います。
この記事では、Pythonでのファイル操作の仕方について解説します。
open関数
Pythonでファイル操作を行うときは、組み込み関数であるopen関数を使います。
text = "Hello FileWorld"
file = open("file.txt","w") #file.txtを上書きモードで開き、ファイルのオブジェクトを変数fileに代入
file.write(text) #ファイルのオブジェクトのwriteメソッドを用いてファイル入力
file.close() #ファイルを閉じる
Hello FileWorld
open関数は、ファイルのオブジェクトを返します。また、open関数は、第一引数に開くファイル名、第二引数にモードを指定します。
モードの種類 | 説明 |
---|---|
r | 読み込みモード |
a | 追記モード |
w | 上書きモード |
もしも、第二引数を指定しない場合は、デフォルト値のrモードになります。また、既存ファイルがない状態でaモード、wモードを使うと新しいファイルが生成されます。
ファイルに書き込むときは、ファイルのオブジェクトのwriteメソッドを使います。writeメソッドの引数で書き込む内容を指定します。
また、ファイル操作が終わったあとはファイルを閉じる必要があります。ファイルを閉じるには、closeメソッドを使います。
#file.txtを読み込み
file = open("file.txt","r") #file.txtを読み込みモードで開き、ファイルのオブジェクトを変数fileに代入
text = file.read() #ファイルのオブジェクトのreadメソッドを用いてファイル出力
file.close() #ファイルを閉じる
print(text)
Hello FileWorld
上のコードでは、ファイルを読み込んで出力しています。
ファイルに書き込むときは、ファイルのオブジェクトのreadメソッドを使います。readメソッドはファイルから読み込んだ文字列を返します。
#file.txtに追記
file = open("file.txt","a") #file.txtを追記モードで開き、ファイルのオブジェクトを変数fileに代入
file.write("\nLets use open function") #ファイルのオブジェクトのwriteメソッドを用いてファイル入力
file.close() #ファイルを閉じる#ファイルを閉じる@
Hello FileWorld
Lets use open function
上のコードでは、ファイルを追記モードで開いて書き込んでいます。
#file.textを上書き
file = open("file.txt","w") #file.txtを上書きモードで開き、ファイルのオブジェクトを変数fileに代入
file.write("Hello FileWorld") #ファイルのオブジェクトのwriteメソッドを用いてファイル入力
file.close() #ファイルを閉じる#ファイルを閉じる@
Hello FileWorld
上のコードでは、ファイルを上書きモードで開いて書き込んでいます。
with構文
毎回closeメソッドを呼び出すのがめんどくさいと言う方にうってつけなのがwith構文です。
with構文を使うとcloseメソッドを省略することができます。
ファイル操作
with構文の中身はインデントされます。また、with構文のブロック内では、変数からファイルのオブジェクトを参照することができます。
with open("file.txt","w") as file :
file.write("with構文を使ってファイル操作")
with構文を使ってファイル操作
上のコードでは、with構文を使って上書きモードでファイルを開いています。また、with構文のブロック内では変数fileからwriteメソッドを呼び出しています。
バイナリファイルの操作
ファイルは大きく分けてテキストファイルとバイナリファイルの2つに分けられます。テキストファイルは文字のデータ、バイナリファイルは文字以外のデータ(画像、音声、実行ファイル)を保存します。
バイナリファイルを扱うときは、open関数の第二引数をバイナリモードに指定します。
モードの種類 | 説明 |
---|---|
rt,at,wt | テキストモード |
rb,ab,wb | バイナリモード |
テキストモードのときは第二引数の後ろに"t"が付き、バイナリモードは第二引数の後ろに"b"が付きます。また、テキストモード、バイナリモードを指定しない場合は、デフォルト値のテキストモードになります。
試しに画像ファイルを読み込んで見ましょう。ここでは、事前に読み込みたい画像ファイル(python.png)をPythonファイルと同じディレクトリの中に入れて実行しています。
text = ""
with open("file.txt","rb") as file :
text = file.read()
print(text)
b'with\x8d\\\x95\xb6\x82\xf0\x8eg\x82\xc1\x82\xc4\x83t\x83@\x83C\x83\x8b\x91\x80\x8d\xec'
b'謎の文字列'という形で出力されました。これは接頭辞と言って、f-stringsのbバージョンのようなものです。この文字列は、16進数で表記されており文字列の頭にbをつけることで2進数のバイト型に変換されます。
すべてのファイルは0と1のバイト配列で構成されています。そして、文字コードのルールに沿って書かれているファイルがテキストファイル、それ以外のファイルがバイナリファイルとなります。
練習問題
では、これまでの内容をもとに次のプログラムを作ってみましょう!
- example.txtファイルを上書きモードで開き、"this is a examplefile"と書き込むプログラム
- with構文で1で作ったファイルに"\nhello :D"と追記するプログラム
- with構文で2で追記されたファイルをバイナリモードで読み込むプログラム
解答例※あくまで一例です。
(1)
file = open("example.txt","w")
file.write("this is a examplefile")
file.close()
this is a examplefile
(2)
with open("example.txt","a") as file:
file.write("\nhello :D")
this is a examplefile
hello :D
(3)
text = ""
with open("example.txt","rb") as file:
text = file.read()
print(text)
b'this is a examplefile\r\nhello :D'
最後に
この記事では、Pythonでのファイル操作について解説しました。
もっとPythonを学びたい!という方はこちらの記事でPythonの基本的な構文を学習することが出来ますのでぜひ立ち寄ってみてください!