【第23回PYTHON講座】CSVファイルで簡単な予定表を作ろう

スポンサーリンク
PYTHON

今回はCSVファイルで簡単な予定表を作ってみようと思います。

CSVファイルは、カンマ『,』で区切ったデータ形式のファイルをいいます。

例えば、メモ帳で下記の通り入力し、test.csvという、拡張子『CSV』で保存します。

そのファイルをエクセルなどの表計算ソフトで開くと、カンマを区切りと見なし、自動的にセルに振り分けられ表示されます。

CSVを表計算ソフトで開く

では、今回は、CSVファイルでスケジュール表を作るプログラムを作成します。

プログラムを実行した際に、何年何月の予定表を作成するのかを入力します。そして、入力された年月の名前でCSVファイルを作ります。ファイルの中身は、最初の行にインデックス(日付、予定)とし、次の行から日付を入力していきます。

今回のプログラムで、ファイルの書き込み、時間の扱いについて学習しましょう。

スポンサーリンク

ファイルに文字を入力する方法を覚えよう!

予定表を作成する前に、ファイルに文字を入力する方法をマスターしましょう。

1行目:スケジュール表のcsvファイルを開ける関数です。

絶対パスでファイルを指定しています。絶対パスだと長くなりますが、はっきりと場所がわかる利点があります。

『’w’』にすることで、ファイルを書き込みモード(write)で開きます。

『’w’』はファイルが存在しない場合、ファイルを新規作成し、ファイルが存在している場合、ファイル内をリセットして新規に書き込みを行います

3行目:『write』はファイルに1文ずつ書き込みます。『\n』は改行です。

6行目ファイルを開いた際は必ず『close』することを忘れないで下さい。重要です!!

ファイルに書き込む

ファイルの書き込みの仕方が分かりましたね。

ファイルの作成手順を覚えよう!

次に、ファイルを作成する手順をマスターしましょう。

コマンドプロンプトで、入力された年月からファイル名を作り、ファイルを作成します。

1行目:ファイルを作成する先のフォルダを指定します。

3行目:作成したい予定表の年月を入力します。入力されたデータは『inputdata』に格納されます。

“Please input year and month(eg:2020/1) >> “のようにコメントを書くと、どのように入力すればいいか分かりやすくなります。

4行目:入力された年月はスラッシュマーク『/』で年と月が別けています。『(x for x in inputdata.split(‘/’))』を実行して、入力文字を『/』で別けて、『year』と『month』にそれぞれ格納します。

5行目:絶対パスでファイル名を定義します。拡張子”.csv”は忘れないで下さい

inputdata.replace(‘/’, ”)』は、”2020/07”と入力された場合、”202007.csv”というファイル名にする為に、『/』を削除する関数になります。

ファイル作成

ファイルが作成されました。

ファイルに1か月分の日付を入力していく

ここからが本番です。

入力された年月でその月の予定表を作成します。

2020/07と入力されたら、1日から下記のように入力していきます。

予定表の中身

そこで、下記の事項を考えなければなりません。

  • 日付を1か月分入力するにはどうするのか?
  • 曜日はどのようにして出力するのか?

日付を記入する

日付に関しては、日時を扱うライブラリ『datetime』を使います。

最初の月日『startdate』を設定するには、『datetime.date(年、月、日)』の関数を使用します。月の最初の日は”1日”なので、1を入力します。

この『startdate』以降の日を、月の最後の日まで、csvに追記していきますが、次の日を求める為には『startdate』に+1をすればいいわけではありません。

日付の加算は、次のように、datetime.timedelta(days=1)を使います。『startdate』に加算すると、『startdate』の翌日を得る事ができます。

上記のコードを利用し、forループを使って、月の日付を記入しています。

月の変わり目を知る

forループで日付を入力していきますが、月の変わり目でforループを関数を停止しなければなりません。

では、どうするか考えてみましょう。

startdate』は、最初2020-07-01ですが、加算されつづけ2020-08-01になる時が来ます。

08という月を見る為に、『startdate.strftime(‘%m’)』を使用します。『%m』month(=月)という意味です。

日付を記入していくループ関数の中で、月が変わったら、ループ関数を『break』すればいいのです。下記の通りになります。

これで、月の最後まで日付を入力することが出来ました。

曜日を出す

曜日は『startdate.strftime(‘%w’)』を使用します。戻り値は数字で返ってきます。0~6で日曜日から土曜日です。

『startdate.strftime(‘%A’)』とすると、英語でSUNDAYと返ってきますが、日本語にしたいので、上記を使用します。

forループに曜日を加える関数を付け加えます。

1行目日本語の曜日のリストを作っておきます。strftime(‘%w’)で返ってくる値と同じ並びで曜日を並べます。日曜日にならstrftime(‘%w’)は0を戻すので、リストの最初は日にするという具合です。

これで完了です!!

では全部のコードを合わせてみましょう。

プログラム全コード

予定表

最後に

いかがだったでしょうか。

ファイルの書き込み、時間の扱いについて少し理解できたでしょうか。

これをアレンジしていけばカレンダーも作れるかもしれません。色々と応用してみて下さい。

コメント

Social Media Auto Publish Powered By : XYZScripts.com
タイトルとURLをコピーしました