ファイル操作の基本Pythonでは、ファイル操作を行うことができる組み込み関数が用意されております。この組み込み関数を介して、ファイルの読み込みや、書き込みを行うことができます。どのようにファイル操作を行えば良いのでしょうか。Pythonにおけるファイル操作は、ファイルを開くところから始まり、ファイルを閉じるところで終わります。そのため以下では、1ファイルを開く方法、2ファイルを閉じる方法、3ファイルを読み込む方法、4ファイルを書き出す方法に分けて解説していきます。ファイルを開くopen()まずファイル操作を行うために、組み込み関数open()を使用します。この関数は「ファイルを開く」ための関数ですが、オブジェクト化(変数に代入)することで、ファイルの読み書きや、ファイルを閉じるなど、一連のファイル操作を全て行うことができます。書式open関数を使ったファイルを開く書式は以下の通りです。open(‘ファイル名.拡張子名’)open関数の引数には、ファイル名と共に拡張子もまとめて指定します。関数を使う際には、変数に代入することでオブジェクト化します。closeメソッド一度、読み込んだファイルは閉じなければなりません。そのためPythonではファイルを開く操作と同時に、ファイルを閉じる操作も指定をします。ファイルを閉じるためには、open関数によりオブジェクト化した変数(ファイルオブジェクト)のcloseメソッドを使います。書式ファイルオブジェクトのcloseメソッドによりファイルを閉じる書式は以下の通りです。ファイルの読み込み続いてファイルの読み込み方法について確認しましょう。r」を指定する必要があり、また引数に読み込むファイルの文字コードをエンコーディングに指定します。読み込むためのファイルオブジェクトの宣言方法をまとめると以下の通りになります。fileData.close()読み込み時の、ファイルオブジェクトの宣言方法について説明しましたが、では実際にファイルを読み込むためにはどうすれば良いのでしょうか。ファイルの読み込みは先ほどと同様、ファイルオブジェクトを介して行われます。for文で1行ずつ読み込むファイルオブジェクトが格納された変数をイテラブルオブジェクトに、for文を介して読み込んだファイルの情報を1行ずつ取り出すことができます。read()メソッドclose()メソッドと同様、ファイルオブジェクトには読み込み用のメソッドが複数用意されております。その内の一つとして、read()メソッドがあります。readメソッドは、対象のファイルオブジェクトの情報を文字列として取得するためのメソッドです。readline()対象のファイルオブジェクトの情報を1行だけ読み込むメソッドとして、readline()があります。readline()は1回しか使用しない場合、最初の行だけが取得できますが、同じファイルオブジェクトに複数回使用すると、2行目、3行目と、次の行を取得することもできます。readlines()readlines()メソッドを使うと、対象のファイルオブジェクトの各行の情報をリストとして取得できます。リストとして取得できるので、インデックス番号を介して特定の行の情報を取得することもできれば、for文を介して各行の情報を一つずつ取得することもできます。readlinesメソッドを使ったファイル操作のプログラム先ほどのreadlinesメソッドを使って、対象のファイルの情報を1行ずつ読み込むプログラムを確認していきましょう。1、2行目で、open関数を介してファイル操作をするために必要なファイルオブジェクトを生成してます。open('Sample2.txt','r',encoding="utf-8")引数にはファイル名「’Sample2.txt’」を指定してますが、このプログラムの様にファイル名のみを指定すると、このプログラムを実行しているファイルと同じ階層のファイルを参照します。r」にencoding引数には「utf-8」を指定しています。2行目の処理を行うことでファイルオブジェクト(インスタンス)の変数のfileDataが、ファイル実体の場所情報を指し示すようになります。ファイル取り込み5行目で、ファイルオブジェクトfileDataのreadlines()メソッドを使って、「Sample.txt」の各行のデータをリストとして取得し、その戻り値を変数linesに格納してます。fileData.readlines()8、9行目でlinesをイテラブルオブジェクトとして、仮変数をlineにlinesの各データを出力しております。print(line)引数にはファイル名「’Sample2.txt’」を指定してますが、このプログラムの様にファイル名のみを指定すると、このプログラムを実行しているファイルと同じ階層のファイルを参照します。8、9行目のイメージを図にまとめると以下の通りになります。readlineとwhile文を応用したファイル操作のプロジェクトreadlines()メソッドと違い、readline()メソッドは1行のデータだけを取得するメソッドでしたが、同じファイルオブジェクトに対してreadline()メソッドを複数回、使用すると、最初の行だけでなく、2行目以降も1行ずつ取得することができます。readline()メソッドの特性と、while文を併用することで、先ほどの「9.1.5:readlineとwhile文を応用したファイル操作のプロジェクト」のfor文とreadlines()メソッドを使ったプログラムと同様の結果が取得できます。以下でwhile文とreadline()メソッドを使った、プログラムを確認していきましょう。同様、1、2行目で、open関数を介してファイル操作をするために必要なファイルオブジェクトを生成しており、引数にはファイル名「’Sample2.txt’」を指定してます。open('Sample2.txt','r',encoding="utf-8")5行目で、ファイルオブジェクトfileDataを介して、「Sample2.txt」から最初の1行目のデータを変数lineに格納してます。fileData.readline()8行目で、print(line)となっているため、1回目のループでは変数lineには「佐藤」が格納されているので、「佐藤」が出力されます。fileData.readline()」とreadline()メソッドを使用しているため、Sample2.txtの次の行のデータが読み込まれ、新しく変数lineに値が格納されます。fileData.readline()」が実行されるため、今度はSample2.txtの次の3行目のデータが読み込まれ、新しく変数lineに値が格納されます。6行目は参照できず、変数lineの値が無効である(false)ため、while文は終了します。当プログラムのwhile文のイメージを図にまとめると以下の通りです。最後に12行目で一連のファイル操作の流れを閉じるため、クローズ処理を行ってます。使用したストリームのクローズ処理を行っています。ファイルの書き込み続いてファイルの書き込み方法について確認していきましょう。対象のファイルがなければ新規作成されますが、存在している場合には、元のファイルの中身から新しく書き込む内容に上書きされます。書き込みファイルオブジェクトの宣言方法をまとめると以下の通りになります。文字列としての書き込みまず文字列として書き込む際には、ファイルオブジェクトのwrite()メソッドを使用します。テキストファイルへデータを書き出すプログラムテキストファイルへ文字列を書き出す処理を行います。ファイル出力の方法、および、作成されたファイルのEclipse上での確認方法について学習しましょう。readFile2.close()実行結果JavaPython解説1、2行目で、open関数を介して読み込み用のファイルオブジェクトを生成しており、引数にはファイル名「’Writing2.txt’」を指定してます。print(readFile.readline())3行目で、readline()メソッドを介して、「writing2.txt」の中身の「Java」が出力されております。続いて9行目で今度は、書き込み用のファイルオブジェクトを生成しており、先ほどと同じく引数にはファイル名「’Writing2.txt’」を指定してます。14行目で「Python」という文字列が格納された変数sampleを引数に、こちらのファイルオブジェクトのwrite()メソッドを使用しており、17行目でこちらのファイルオブジェクトをクローズしてます。writeFile.close()今度はまた新たに読み込み用のファイルオブジェクトを宣言し、同じく引数にはファイル名「’Writing2.txt’」を指定してます。readline()メソッドを介して「writing2.txt」の中身を取得しておりますが、今度は書き込み用オブジェクトを介して内容が上書きされているため、「Python」が出力されております。ファイル操作におけるその他のモードopen関数に指定できるモードは、読み込みのrや書き込みのwだけではありません。追記モードのaや、読み書きモードのr+やw+などがあります。以下で読み込み、書き込み以外でよく使用される、モードについて説明します。追記モード:aこちらは既存のファイルに新しく内容を付け足したい場合に使用します。,'a')書き込みモードと同じく、write()メソッドが使用できます。readFile.close()実行結果PythonJava先ほど作成した「writing.txt」に「Java」が追記されたのがわかります。「Java」の前に「\n」が指定されてますが、「\n」は改行を意味します。読み書きモードのr+r+は既存のファイルの読み書きをするためのモードです。読み込み用のメソッド(readline()やreadlines())、書き込み用のメソッド(write())が使用できるので、わざわざ二つのファイルオブジェクトを宣言する必要がなくなるように思えますが、実際に新しく書き込んだ内容を読む込むためには、新たにファイルオブジェクトを生成して読み込み直す必要があります。【r+モードでの読み込み】PythonJava【rモードでの読み込み】PythonJavaSQL上記の凡例では、r+モードにおけるファイルオブジェクトreadWriteにおいて、write()メソッドで「SQL」という文字列を、「writing.txt」に追記してますが、再びreadWriteを介して、ファイルの中身を1行ずつ読み込んでも、「SQL」は出力されません。これはファイルの中身は書き換えられたが、ファイルを読み込んだ時点(readWriteにファイルの情報が格納された時点)では、SQLの情報が入っていなかったためであり、「writing.txt」自体には、「SQL」が含まれますが、ファイルオブジェクトreadWriteの中には、その情報は含まれません。r+モードの注意点そのため読み書き用のファイルオブジェクトreadWriteをクローズした後、新たに読み込み用ファイルオブジェクトreadFileを宣言し、readFileを介してファイルの中身を読み込むと、SQLも含まれております。読み書きモードのw+w+モードはr+モードと同じ使い方ができますが、既存ファイルだけでなく新規ファイルの作成にも適用してます。,'w+')読み込み用のメソッド(readline()やreadlines())、書き込み用のメソッド(write())が使用できるので、わざわざ二つのファイルオブジェクトを宣言する必要がなくなるように思えますが、r+モードと同様、実際に新しく書き込んだ内容を読む込むためには、新たにファイルオブジェクトを生成して読み込み直す必要があります。World」という文字列を、新規ファイル「writing3.txt」に書き込みをしてますが、再びreadWriteを介して、ファイルの中身を1行ずつ読み込んでも、情報は出力されません。World」が含まれますが、ファイルオブジェクトreadWriteの中には、その情報は含まれません。テキストファイルへ繰り返し処理を利用し配列データを書き出すプログラムテキストファイルへ繰り返し処理を利用して、配列データの文字列を書き出す処理を行います。繰り返し処理と配列を利用した効率の良いファイル出力のロジックについて学習しましょう。2行目で追記モードaのファイルオブジェクトwriteFileを生成し、対象のファイルを「writing3.txt」に指定しております。書き込み用データを文字列配列に用意しています。open('writing4.txt','a',encoding='cp932')続いて4行目で書き込み用データを文字列配列に用意しています。['佐藤','田中','鈴木','山田']7、8行目でfor文を介してnamesから1つずつ要素を取り出し、write()メソッドで「writing3.txt」に値を書き込みます。+'\n')11行目でwriteFileはクローズします。writeFile.close()そして14行目で読み込み用のファイルオブジェクトreadFileを宣言し、16、17行目で「writing3.txt」の各行のデータを出力します。print(line)出力が終わったらreadFileのクローズをします。readFile.close()繰り返し処理を利用して配列データを書き込む手法はそれほど難しくなかったはずです。これまで繰り返し処理と連携して配列データの出力表示することは行ってきました。今回のプログラムではデータの出力先が書き込みファイルになっているだけの違いでしかありません。クローズ処理ファイル操作でクローズ処理を忘れてしまうとファイル操作は行えますが、ファイルのデータが保存されないのなどの事態を招くので、必ず処理を行わないといけません。そのためファイルオブジェクトを宣言する際には、close()メソッドを指定し忘れないように気を付けましょう。