この章ではファイルを読み書きする方法について説明します。
Pythonではプログラムでファイルを作成したり、ファイルの読み書きをすることが出来ます。
初めにファイルの中身を読み込む方法について説明します。
pyファイルの他に「test.txt」を用意します。
ファイル名は自由に付けていただいて結構です。
では例をみてみましょう。
結果は次の通りです。
ファイルを開くにはopen関数が必要です。
「モード」にはファイルをどのような状態で開くのかを指定します。
例えば「r」ですと、読み込み専用で開きます。
例では「test.txt」の中身を読み込みたいので、モードは「r」にしています。
モードは他にも以下の種類があります。





次にファイルの内容の読み込み方法について説明します。
ファイルの内容を読み込むためのメソッドは3種類あります。

例ではreadメソッドを使っていますが、このメソッドはファイルのすべての内容を読み込むので、
で読み込んだ内容を変数dに入れて、
で出力しますと「test.txt」の内容が出力されます。
そして、ファイルを開いたら、閉じなくてはいけないので、close関数で閉じます。
次はreadlinesメソッドを使って、ファイルを読み込む方法について説明します。
readlinesメソッドはファイルの内容すべてをリストとして返すので、
で出力すると
になります。
ファイルの行の終端には改行文字が付いているので、for文で出力する時には以下のように改行されて出力されます。
この改行文字を取り除きたいのであればstripメソッドを使用します。
このstripメソッドは文字列の前や後の改行文字や空白、タブなどを取り除いてくれます。
先ほどの例をstripメソッドを使って書き直すと以下の通りです。
結果は以下の通り、改行文字が取れていることが分かります。
次はreadlineメソッドを使ってファイルの内容を改行文字までの1行を読み込み、文字列を出力します。
readlineメソッドはファイルの内容を改行文字までの1行を読み込みます。
結果は次の通りです。
次はファイルへ書き込む方法について説明します。
指定ファイルに文字列を書き込むにはモードを
で指定します。
ファイルに書き込むにはwriteメソッドの引数に文字列を指定してください。
ファイルの中で改行したい場合は
のように改行文字を使用します。
この例ではモードに「w」を指定しているので、ファイルの中身をカラにして書き込みます。
結果は以下のように「test.txt」が書き替えられます。
もう一つファイルに書き込むメソッドがありますので、次の例で説明します。
ファイルに書き込むにはwritelinesメソッドの引数に文字列、リスト、タプルなどを指定してください。
writeメソッドの引数にリスト、タプルを指定するとエラーになります。
結果は以下の通り「test.txt」が書き替えられます。
タグ: readlines
IOクラスについて知ろう
この章ではIO クラスとファイルの入出力について説明します。
ファイルの入出力の基本はファイルを開いて、ファイルに書き込んだり、ファイルから読み込んだりして、最後にファイルを閉じます。
ファイルの入出力にはIO クラスのオブジェクト(IO オブジェクト)を使用します。
ではIO クラスを使用して、ファイルを操作する方法について説明します。
ファイルを開いたり閉じたりする方法は2つあります。
構文の中のアクセスモードとは「ファイルを読み込み用で開くのか」、「書き込み用で開くのか」、「読み書き両方で開くのか」を文字列で指定したものです。



「ファイル操作の手順の2」のファイルに書き込んだり、ファイルから読み込んだりするには次の表のメソッドを使用します。
以下のメソッドを使って、入力したり、出力したりします。



では次の例で「test.dat」からデータを読み込んでみましょう。
初めにファイルを開きますが、この例では先ほどの基本構文 2でファイルを開いています。
アクセスモードは読み込み専用の
を使用しています。
「オブジェクト.gets 」と言う形式でファイルからデータを読み込むことができます。
getsメソッドはファイルの中の1行分を読み込むことが出来ますので、「abcde」だけを読み込み、ファイルの終わり(EOF)になるとnilを返します。
最後に
という形式でファイルを閉じます。
基本構文2でファイルを開いた場合にはcloseメソッドは省略できます。
先ほどの例では1行しか取り出さないので、すべての要素を取り出したい場合はwhileを使用します。
次の例のようにwhileを使うと「abcde」「efgh」のすべてが取り出せます。
「a.gets」で取り出されたデータがbに入り、それをprintで出力しています。
次の例をみてみましょう。
readlineメソッドもgetsと同じでファイルの中の1行分だけ読み込むことが出来ます。
基本構文は
です。
次の例をみてみましょう。
と言う形式で、ファイルのすべての行を配列(この例ではb)に格納してくれます。
それを eachメソッド で繰り返し取り出しています。
結果は以下の通りです。
次の例をみてみましょう。
「IOオブジェクト.getc 」という形式でファイルから1文字ずつ読み込みます。
このメソッドはファイルの終わり(EOF)になるとnilを返します。
次の例をみてみましょう。
基本構文は
です。
ファイルの初めから終わりまでを読み込んで出力します。
ファイルの終端に達するとnil を返します。
次は
という構文でサイズを入力し、そのサイズ分だけファイルからデータを取り出します。
この例では2バイト分だけ読み込んでいるので、結果は「ab」です。
次の例をみてみましょう。
と言う基本構文でファイルの中身をすべて読み込むことが出来ます。
次はファイルに書き込むメソッドについて説明します。
では例をみてみましょう。
=>
と言う形式でファイルに改行を入れて書き込むことが出来ます。
これでt.datに「abcdef」「aiueo」が改行を入れて書き込まれます。
次の例をみてみましょう。
と言う形式でファイルに改行を入れないで書き込むことが出来ます。
結果はte.datに「abcdefaiueo」のように改行を入れないで書き込まれました。
次の例をみてみましょう。
と言う形式でファイルに改行を入れないで書き込むことが出来ます。
結果はt.datに「abcdefaiueo」のように改行を入れないで書き込まれました。
writeメソッドを使って、改行を入れて書き込みたい場合には以下の通り、
を入れます。
次の例をみてみましょう。
と言う形式でファイルに書き込むことが出来ます。
結果はte.datに「abcdefaiueo」のように改行を入れないで書き込まれました。
次はファイルポインタについて説明します。
ファイルのデータを読み書きするには「ここまで読んだから次はここから読む」もしくは「ここまで書いたから次はここから書く」のように位置を覚えておかなくてはいけませんが、プログラマ自身が覚えている必要はなく、ファイルポインタと言う位置情報にこのデータが記録されています。
次の例をみてみましょう。
「IOオブジェクト.pos」と言う形式で、現在のファイル位置を得ることが出来ます。
2バイト読み込んだので、現在のファイルの位置は2の箇所にあります。
例の実行結果は「ab」と「2」を出力します。
またposは現在の位置を知るだけでは無くて、任意の位置に移動することが出来ますので次の例で説明します。
移動したい場合は
と記述します。
「i.pos=5」は5バイトだけ移動します。
5バイトで出力すると「fgh」を出力します。
「i.pos=0」は先頭まで移動します。先頭まで移動したので「abcdefgh」を出力します。
次はファイルポインタを移動するseekメソッドについて説明します
では例をみてみましょう。
で、ファイルポインタを自由に移動させることができます。
第 2引数のwhenceには以下の3種類から選択して、ファイルポインタの動きを決めることが出来ます。
では例の説明をします。
「i.read(2)」で2のサイズだけ動いていて、その後に
でさらに5のサイズだけ移動しているので
で現在の位置を見ると7になります。
7進んだ位置で出力すると「h」を出力します。
のように
に変更したとしますと、これは絶対位置なので
で現在の位置を見ると5になります。
次はrewindメソッドについて説明します。
rewindメソッドはファイルポインタを先頭に戻します。
では例をみてみましょう。

と言う形式でファイルポインタを先頭に戻します。
puts i.posで出力すると0が出力されます。