[Python入門]ファイル操作の基本:Python入門(1/3 ページ)
テキストファイルを例に、ファイルのオープン、ファイルに対する読み込みや書き込み、ファイルのクローズなど、ファイル操作の基本を取り上げる。
前回までは例外の基礎知識を取り上げた。今回からは数回に分けて、ファイル操作について見ていくことにしよう。
今回の目次
ファイルとは
ファイルとは、コンピュータに何らかのデータを長期間にわたって保存しておく際に使用されるものだ。テキストファイルやアプリケーションソフトの実行ファイル、各種画像ファイル、音楽や音声を含んだファイル、Pythonのスクリプト(実質的にはテキストファイルだが、Pythonの実行環境に読み込んで実行可能なもの)など、さまざまな種類があるのはお分かりのことだろう。
これらのファイルを取り扱うための手段ももちろんPythonには用意されている。その入口となるのが組み込みのopen関数だ。
open関数はその名の通り、ファイルを「オープン」して、Pythonのプログラムからそのファイルを利用できるようにしてくれる。このときにはファイルを操作するための「ファイルオブジェクト」がプログラムに渡される。プログラムはファイルオブジェクトを介して、そのファイルの内容を読み込んだり、あるいはそのファイルに何かを書き込んだりして、最後にファイルを「クローズ」する。これにより、ファイルは閉じられて、その利用が終了する。
ファイルを利用する際には、オープン→必要に応じた処理→クローズという流れになることを覚えておこう。また、ファイル操作には大きく分けて読み込みと書き込みという2種類があることを最初に覚えておこう。
もう一つ、ファイルにはおおまかに分けて「テキストファイル」と「バイナリファイル」の2種類がある。テキストファイルは、もちろんテキスト(人が読める文字が連続したもの)を保存するもの。バイナリファイルはそれ以外のデータを保存するものだ。テキストファイルは人間が読み書きすることを念頭に置き、テキストエディタなどでその内容を確認したり編集したりできるのに対して、バイナリファイルはそのファイルを利用できるプログラムが直接読み書きすることを念頭に置いたものだ。
以下ではまずテキストファイルを例として、open関数を使ってファイルを開き、その内容を読み書きして、最後にファイルをクローズするまでの手順について見てみよう。
テキストファイルの準備
以下ではテキストファイルを例にファイル操作の説明をする。まずファイル内容の読み込みから始めるが、その前に読み込む対象となるファイルが必要だ。そこで、Jupyter Notebook環境でファイルを別途作成しておこう。
まず[File]メニューから[Open]を選択する。すると、次に示すようなファイル一覧がブラウザの別タブに表示されるので、ページ右上にある[New]ドロップダウンをクリックして、[Text File]を選択しよう。
これによりさらに別のタブが開いて、「untitled.txt」という空のファイルが表示される。そこで、ここに何行かのテキストを入力しよう。ここでは「Hello Python」と空行、続けて「Hello Deep Insider」と空行という4つの行を入力している。
テキストファイルの内容を入力したら、[File]メニューから[Rename]を選択する。これにより[Rename File]ダイアログが表示されるので、ここでは「sample.txt」というファイル名に変更しておこう。ただし、これはファイル名を変更しただけで、その内容はまだ保存されていない。最後に[File]メニューから[Save]を選択して、ファイルの内容を保存する。
ファイル名を変更して、ファイルの内容を保存しているところ
これでファイルの準備ができたので、ファイルをopen関数で開いてみよう。
テキストファイルの読み込み
既に述べた通り、Pythonでファイルをオープンするにはopen関数を使用する。
open関数
シンプルなopen関数の構文を以下に示す。以下の構文で省略した他のパラメーターについては本稿では取り上げない。
open関数
open(file, mode='r')
fileにオープンするファイルの名前を、modeにオープンするモードを指定する。modeに指定可能な値は以下の通り。
パラメーターmodeに指定可能な値 | 説明 |
---|---|
'r' | 読み込み用にオープン(デフォルト値) |
'w' | 書き込み用にオープン |
'a' | 追記用にオープン |
'x' | 排他的書き込み用にオープン(既にファイルがあるときにはエラーとなる) |
'b' | バイナリモード(詳細は次回に取り上げる) |
't' | テキストモード(デフォルト値) |
'+' | 更新用にオープン。'r'、'w'、'a'と一緒に指定する必要がある |
open関数のパラメーターmode |
パラメーターmodeを省略し、ファイル名だけを指定してopen関数を呼び出すと、そのファイルがテキストモードで読み込み専用としてオープンされて、そのファイルを操作するための「ファイルオブジェクト」が手に入る*1。このファイルオブジェクトを介して、実際のファイルを扱うことになる。
*1 open関数が返す「ファイルオブジェクト」の種類はどんな種類のファイルをどんな目的(読み込み、書き込み、読み書き両方)でオープンしたかで変わる。どんな種類のファイルオブジェクトがあるかは、Pythonのドキュメント「io --- ストリームを扱うコアツール」を参照のこと。ioモジュールはファイル、およびそれをさらに広範な概念とした「ストリーム」を扱うためのクラスを提供していて、それらのクラスではファイル操作に必要な読み込みや、書き込みなどの操作が規定されている。
テキストファイルをオープンした場合に得られるファイルオブジェクトでは、テキストファイルの内容を改行コードで各行が区切られた文字列として扱える。その内容はreadメソッドやreadlineメソッドで読み取ることができる。このときには、現在どこまでの内容を読み取ったかは「ファイル位置」「シーク位置」「ファイルポインタ」などと呼ばれ、ファイルオブジェクトが管理してくれている。
ファイルをオープンした直後は、ファイル位置はファイルの先頭になっている。そして、readメソッドやreadlineメソッドなどを呼び出して、ファイルの内容を読み込むたびにその位置が、次に呼び込みを行うべき位置に移動する。readメソッドを(引数なしで)呼び出せば、全ての内容が読み込まれるので、これによりファイル位置はファイルの末尾となるし、readlineメソッドは1行を読み込むので、ファイル位置は次の行の先頭になるといった具合だ。これによって、ファイルの読み込みを都合よく行えるようになっている。
では、実際に先ほど作成したテキストファイルを実際に読み込み用にオープンしてみよう。
myfile = open('sample.txt')
これで「sample.txt」ファイルからその内容を読み込むためのファイルオブジェクトが得られた。次に、その内容を読み込むが、これには幾つかの手段がある。
Copyright© Digital Advantage Corp. All Rights Reserved.