最初の引数としてファイル名を、2番目の引数としてファイルを開くモードを指定します。モードは、読み込む場合は"r"、書き込む場合は"w"を指定します。"w"を指定すると、元もとのファイルの内容は失われます。encoding引数で、ファイルのテキストの文字コードを指定します。ファイルアクセスのためのオブジェクトを返します。メソッドは、ファイルの内容をすべて読み込んで、行(文字列)を要素とするリストを作り、戻り値としてそのリストを返します。閉じなければなりません。closeメソッドで、ファイルを閉じます。■実行時エラーを捕まえるプログラムを実行しないと分からないエラーがあります。ファイルを開こうとして、ファイルが見つからない場合など。このようなエラーは、プログラムの開始時点では分かりません。Pythonでは、このような実行時エラーが発生すると、例外が送出されます。例外を受け止めて、エラーメッセージを表示してやり直すなどの対策を取らなければなりません。文法は次のとおりです。except節に跳んで、except節の文が実行されます。例外型名でどの例外を受け取るか指定します。ここでエラーメッセージを表示したりします。except節の実行が終わると、try文全体から抜けます。try節のなかで例外が発生しなかったときは、except節はまったく実行されません。finally節は、try節であれexcept節であれ、try文から抜け出るときに、必ず実行されます。finally節に制御が移り、try文から抜けます。finally節が実行された後で、例外が送出されます。1行ずつ読み込めます。for文の式リストでファイルアクセスのオブジェクトを書いても、1行ずつ読み込むことができます。ファイルから1行ずつ読み込んで、それを表示します。sale200412.csvの内容は、次のとおりです。文字列をsepで分割してリストにして、そのリストを返します。ここではカンマで分割して、品名をkに、金額をvに代入しています。new)は、文字列の中に含まれるoldをすべてnewに置換します。これで品名に含まれる「"」を取り除きます。(辞書)もう少し実用的になりそうな例を書いてみます。二つの販売実績ファイルの金額を足し合わせて表示します。オブジェクト(後述)で、各ファイルの金額を加えていきます。このif文では、読み込んだファイルの品名がすでに存在しているか判定します。存在していれば金額を加算し、そうでなければelse:以下を実行し、新たに金額を設定します。タプルやリストでは、特定の要素を取り出すときには、その格納位置を指定します。格納するオブジェクトの名前など、何か意味のある値をキーにして、それに対応する値(要素)を取り出すようにしたほうがプログラムが分かりやすくなる場合がよくあります。先ほどのサンプルでも、品名をキーにしました。...}という形で書きます。値を取り出すときは、オブジェクト[キー]と書いてキーを指定します。次のスクリプトは、辞書の動作を確認します。"foo"キーの型をいろいろ変えてもエラーにはなりませんが、プログラムの見通しが悪くなるため、普通は一つの辞書ではキーの型は固定します。一つのキーに対して複数のオブジェクトを結びつけることはできません。タプル、リストと違い、先頭から順番に取り出そうにも、どのような順序かはやってみないと分かりません。お絵かきプログラムにファイル保存を付けるでは最後に、少し長くなりますが、お絵かきプログラムに保存、読み込み機能を付けてみましょう。ダウンロード後、拡張子を.pyにしてください。■データを記録するマウスをボタンを押したときやドラッグしたりしたときの座標を記録していきます。色、太さ、開始点を記録します。list#appendメソッドで、そのときそのときの座標をリストの末尾に加えていきます。以前見たようにオブジェクトが共有されることを利用しています。更新されることになります。■ファイル保存するにはファイルに保存する部分です。できるだけ単純にするために、次のようなテキストファイルで保存することにします。色名、太さ、点の位置の並びです。点の位置が2つ以上あるときは線を引くことにします。改行で線を区切ります。は新しいメソッドです。ユーザーが「保存」ボタンを押すと呼び出されます。tkinter.filedialog.asksaveasfilename()で、ファイル選択ダイアログを開きます。今回のサンプルでは、毎回ファイル名を選ぶようになっています。上書き保存できるようにするのは宿題にします。"w"で、ファイルを書き込みモードで開きます。ファイルに書き込むメソッドは、write()です。色名と太さを格納していたので、まずそれから出力します。それ以外は点データなので、for文で繰り返して、座標を出力します。■データを読み込むデータを読み込むところは、ちょっと長いです。これでキャンバスを白紙に戻します。色、太さ、座標に分解します。dataに追加していきます。今回はメニューバーを付けました。window.quit)これは見てのとおりです。今回のまとめ以上で、プログラムを作るうえで基本となるところは、一通り学習できました。あとは、リファレンスマニュアルやいろいろなサンプルを見て、作れるプログラムの幅を拡げていくといいでしょう。オプションメニューの代わりに、ラジオボタンを使うこともできます。ラジオボタンの場合は、次のようになります。for文は、一定回数繰り返すもので、後述します。これまで見てきたオブジェクトは何もしなくても使えるものでしたが、Pythonインタプリタに組み込まれていないライブラリの機能を使うときは、importする必要があります。正規表現は、文字列のマッチングに使う表記法で、これを使ってあいまい検索などを行えます。いくつかの文字に特別な意味を持たせ、それを組み合わせることで検索するパターンを指定します。このような特別な文字のことをメタ文字といい、次のようなものがあります。次のスクリプトは、文字列を検索します。string)は、stringの中で、patternにマッチするか調べます。日本語の文字列を文字単位で検索するときは、Unicodeモードにする必要があります。GIMPなどのプログラムを思い描いてみてください。ファイルからデータを読み込み、メモリに保持し、そこで編集を行います。意味のあるプログラムを作ろうとすると、データをメモリ上に置いておく必要があります。プログラミング言語によって、メモリ上のデータの見方は変わります。Pythonはオブジェクト指向と呼ばれる一団に属しており、Pythonスクリプトから見えるメモリは、オブジェクトで満たされています。以下で基本的なオブジェクトを見ていきますが、いずれも、中身が違っても同じ種類のものであれば、同じように操作できます。このオブジェクトの種類のことを(データ)型、あるいはクラスといいます。