50歳からの人生 自分の好きなことやって生きていくことができるのか!? ここは「がっちゃん 」が実際に体験したことを記録し、楽しく人生を過ごせるためのヒントをさぐる研究所です!

Pythonプログラミングレッスン:その4(ファイル操作)

どうも! 職業訓練生のがっちゃんです!

 50歳にして長期人材育成「情報セキュリティ管理者資格」2年コースを絶賛受講中です!

 今回は、授業で習った「Python3系」プログラミングの基礎:ファイル操作編として書いていきたいと思います。プログラミングで使用しているソフトは「Pycharm Community」を使っています。インストール、使い方については以下のブログをご参考にしていただければと思います。

ファイル操作:open,close関数

 Pythonでファイルを読み書きするためにはまず、ファイルを開く必要があります。「open」はファイルを開く関数です。第1引数で開くファイルを指定し、第2引数で、読み込み(r)や書き込み(w)などを示すモードを指定します。

 「close」はファイルを閉じる関数です。読み書きの処理を終えたら必ずファイルを閉じるようにしてください。いろんなファイルをオープンしたままにしておくと、リソースがどんどん消費され、ついにはファイルを開けなくなったりします。

 ですので、これらは基本、セットで使うと思ってください。さっそくプログラムを書いて実行していきましょう。

 まずは読み書きするためのテキストファイルを作成します。プロジェクトの上で右クリックして「新規」→「ファイル」を選択、「sample.txt」を作成します。

 テキストの内容はなんでも結構です。1行で良いので適当にお書きください。

読み込み:rもしくはread

 先ほど作成した「sample.txt」を読み込みます。以下のようにプログラムを書いてみましょう。

 実行結果は以下の通りになります。

 MacOS環境ならこれで問題なく動くのですが、WinPC環境では以下のようにエラーが出るのではないでしょうか?「UnicodeDecodeError」コーディングエラーのようです。

 その場合は、以下のようにプログラムを修正しましょう。

 3行にしてプログラムを記述しましたが、オープンとクローズを合体させて2行で書くことができます。以下のように「with」文を使って、自動でファイルを閉じてくれる書き方が普通だそうです。

注意:2行目のプリント文はインデントすることを忘れずに。

書き込み(上書き、新規作成):wもしくはwrite

 ファイルに上書き、もしくは新規作成の時に使用します。先ほどの「sample.txt」を使って確認してみましょう。ちなみに「\n」は改行コードになります。

 実行結果は以下のとおりになります。最初に書かれていた「今日は太陽の塔を見に行ってきました!」が見事に消え、上書きされています。

 ファイルの新規作成にも、この「w」は使えます。「sample2.txt」を作成して見ましょう。

 実行結果はこのとおり、「sample2.txt」が出来上がりました!

追記する:a

 ファイルの内容を消さずに追記するには「a」を使います。ファイルの末尾から追記されます。

 実行結果は以下のとおりです。ホンマに直後から追記されてますね。改行して追記するなら、手前にも改行コードを入れておけば、改行されて追記されます。

CSVファイルの読み出し:reader関数

 aiや機械学習に強いPythonプログラミングですが、データ分析も得意とされています。データ分析で欠かせないのが、データの読み込みです。データ保存にはCSV(Commma Separated Value)ファイルが使われています。

 今回は、CSVファイルの読み出しや書き込みの操作で必要なreader関数についてのお話です。まずは読み出しや書き込みに必要な「sample.csv」を作成しましょう。作り方は「sample.txt」を作成したときと同じです。作成すると次のようなメッセージが出てきますので、「プラグインをインストール」をクリックしてください。

 すると「プラグインを選択してインストールまたは使用可能にする」というウインドウが出てきますので「OK」をクリックします。

 「sample.csv」の内容はなんでも良いのですが、カンマで区切ったデータにしてください。あと、空欄を使うときは「半角」にしておいてください、「全角」だとちょっと一手間必要になってきますので。私は以下のように作成しました。

 「sample.csv」ファイルができたら、次は「samplecsv.py」を作成します。まずは以下のように、今まで使った「read」関数で作成してみます。

 出来上がったら実行してみます。新しいPythonファイルを実行させるときは、以下の処理を忘れずに。

 実行結果は以下のとおりです。なんだ、read関数でも読み込めるじゃん、と思ってはいけません。これでは、ただ単にファイルの内容を表示しただけにすぎません。それぞれの行を配列にして取ってこないとデータとして処理することはできません。

 そこで「reader」関数を使用して、以下のようにプログラムを作り直します。再度実行してみてください。

 実行結果は以下の遠織となり、各行がリスト型で格納されていることが分かります。

 横一列の配列にする場合はこちら。

 実行結果は以下のとおりになります。

 上で出来上がったリストを、要素ごとに取り出してプリントします。

 実行結果は以下のとおりです。要素ごとに取り出せましたね。

csvファイルへの追記:writer関数

 次は「sample.csv」ファイルにデータを追記していきます。追記には「writer」関数を使用します。

 以下のとおり、「sample.csv」ファイルに1行追記されました。

練習問題:CUIで操作するTODOリストプログラムを作成する

 今までの学習の成果を発揮する時がきました!CUIで操作できるTODOリストプログラムを作成してみましょう。TODOリストプログラムに盛り込む機能は、以下のとおりです。

CUIで操作するTODOリストプログラムには、以下の機能を盛り込んでください。
初期画面:メニューの表示
1:を選択すると「一覧表示」登録済みのTODOリストが一覧で表示されます
2:を選択すると「新規入力モード」新規にTODOリストが入力できます
  いつの予定ですか? <= 日付を入力 (YYYY/MM/DD形式)
  内容はなんですか? <= スケジュールの内容を入力(文字列)
  日付と内容を登録  => CSVファイルに保存
  9を選択すると「初期画面」に戻ります
0:を選択すると「TODOリストを終了します」
※バリデーション(入力、書式チェック)については考慮しなくて良い。
※新規「todolist」プロジェクトとして作成してください。
 毎度のことですが、私はコメントアウトでプログラムの流れを作成してから、普通の構文だけで作成します。最初にデータを記録するための空の「todolist.csv」ファイルを準備し、以下のような「todolist.py」を作成しました。
 この場合、新規登録の際に「9を選択すると「初期画面」に戻る」という動きを実現できません。私のプログラムの腕前では、ここまでが限界です。実現できる方もいらっしゃいますよねぇ。これにつきましては、次の関数化によって実現できると思っています。

 上のようにプログラムができたので、実行してみます。うまく実行できていますね。「todolist.csv」ファイルにも反映されていますね。うまく実行できない方は、まずはインデントが正しいかどうかを疑ってみてください。

 次は上のプログラムを関数化してモジュール化していきます。関数化できれば、新規登録から「9番を選択したら初期画面に戻る」という機能を簡単に盛り込めるかと思います。

 関数化して、全ての機能を盛り込めたのはいいのですが、あの「9を選択したら初期画面に戻る」っていう機能は、不要なんじゃないかな!?って思うわけであります。あんまり意味がないのかなぁ、と思っちゃうのは私だけかな!?まぁ、プログラミングの腕前を試すのには必要なんかなとは思いましたが、実際にプログラムを実行してみて思うことは、実装レベルでは不要なんじゃないかなと思うわけです。

まとめ

 というわけで、このファイル操作で、Pythonプログラミングの基礎は終了となりました。きっと他にもいろいろな機能があるんだろうとは思うのですが、授業ではここまでで基礎は終了です。

 次回からは、「excel」や「SQLite」などと連携して処理するプログラムの学習に入っていきます。

 今のところPythonプログラミングは、Javaプログラミングの授業の時と違い、置いてきぼりにされることなく、キチンと理解しながら授業についていけています。これからもついて行けるようなら本気で基本情報処理技術者試験のプログラミングはPyrhonでいこうと思います。

それでは本日も最後までお付き合いいただきまして、ありがとうございました。

スポンサーリンク
最新情報をチェックしよう!