Python学習【365日チャレンジ!】101日目のマスターU(@Udemy11)です。
101という数字を見ると思い出すのはやっぱり、【101匹わんちゃん】ですが、かなり前の映画なので、どんな話だったか詳細が思い出せません。
ディズニーの映画で、ダルメシアンが101匹出てくることと、その子犬たちを毛皮にしてしまおうとする魔女みたいな女性が出てくるってことだけは憶えていますが、最後はやっぱりハッピーエンドだったと思います。
ハッピーエンドじゃない映画ってあんまりないですよね。
といってもバッドエンドの映画は現実味があって、色々と考えさせることがあるので、個人的には結構好きだったりします。
ちなみに私が自信をもって、おすすめできるバッドエンドの映画がこちら!
何度観ても映画の中に引き込まれて、最後はなんとも言えない気分になりますが、超おすすめの映画です。
それではさっそく今日もPython学習をはじめましょう!
昨日の復習
昨日は、subprocess
モジュールを使ったコマンド操作について学習しました。
subprocess.run()
を使って、ターミナルのコマンドを実行しますが、少し注意点もありました。
import subprocess
subprocess.run(['ls', '-al'])
このコードは、ターミナルでls -al
(フォルダ内のファイル・フォルダ詳細を表示するコマンド)を実行しますが、次のように書くこともできました
subprocess.run('ls -al', shell=True)
ただ、この場合は、|(パイプ)
に続けてファイルなどを削除するrm
コマンドを追加してしまうこともできるため、セキュリティーの関係で使用しないほうが良いということでした。
詳しくは昨日の記事をごらんください。
それでは、今日のPython学習をすすめましょう!
datetime.now()
datetime
モジュールは、現在の時間を取得できる標準ライブラリです。
import datetime
now = datetime.datetime.now()
print(now)
print(now.isoformat())
print(now.strftime('%y/%m/%d-%H:%M:%S'))
出力結果
2020-05-21 20:45:59.239749
2020-05-21T20:45:59.239749
20/05/21-20:45:59
datetime.now()
関数を使うことで、現在の日時を取得することができます。
isoformat()
を加えると、国際標準化機構 (ISO) の定義した形式で表示され、日付と時間の間にT
が入りますが、これは、ローカル(つまり日本)のタイムゾーンという意味があるようです。
最後の行のstrftime()
は独自のフォーマットで日時を表示する方法で、表示フォーマットについて、Python公式ドキュメントの「strftime()とstrptime()の書式コードをごらんください。
datetime.date.today()
時間はいらないので、今日の日付だけが必要だというときは、date.today()
の出番です。
import datetime
today = datetime.date.today()
print(today)
print(today.isoformat())
print(today.strftime('%y/%m/%d'))
出力結果
2020-05-21
2020-05-21
20/05/21
datetime.now()
同様に、isoformat()
やstrftime()
を使うことができ、今日の日付だけを抽出することができます。
datetime.time
日付の次は、時間ですが、こちらのdatetime.time
は、現在時刻を取得するのではなく、時刻のフォーマットに数値を入れることができます。
import datetime
t = datetime.time(hour=1, munite=2, second=3, microsecond=4)
print(t)
出力結果
01:02:03.000004
現在時刻がdatetime.time
で指定した時間になればなにか動作をさせるということに使えそうです。
datetime.timedelta()
datetime.timedelta()
は、日や時間、分、秒を指定することができる関数で、引数に指定した変数を定義して、現在日時から何日後、何日前といった日時を取得することができます。
import datetime
now = datetime.datetime.now()
d = datetime.timedelta(days=1,hours=1, minutes=1, seconds=1, microseconds=1)
print(now)
print(now + d)
出力結果
2020-05-21 21:27:23.800559
2020-05-22 22:28:24.800560
4行目で、1日、1時間、1分、1秒、1マイクロ秒を変数d
に代入して、6行目で現在の日時に変数d
を足しているので、変数d
に代入した分だけ進んだ日時が表示されます。
このtimedelta()
の引数には年と月は用意されていなくて、weeks
からしか用意されいません。
これは、うるう年が関係しているようで、正確に日時を指定するには、日数が変わることのない週までしか指定できないみたいです。
time.sleep()
先に学習したdatetime
モジュールのdatetime.time
とは違い、time
モジュールは、日時に関係なく、時間を操作するモジュールです。
よく使うのは、time.sleep()
関数で、引数に数値を指定することで、指定した秒数だけ作業を止めておくことができます。
import time
print('start')
time.sleep(10)
print('stop')
このコードを実行すると、まずstart
が出力されて、10秒経過してからstop
が出力されます。
使い所としては、クイズアプリなどで10秒以内に回答しなければ不正解を出すという場面などで使われてそうですね。
バックアップファイルに日時を入れる
datetime
モジュールの代表的な使い方としては、バックアップファイルを作成するときに、日時をファイル名に付与するというやり方が考えられます。
import os
import shutil
import datetime
f_name = 'test.txt'
now = datetime.datetime.now()
if os.path.exists(f_name):
shutil.copy(f_name, '{}_{}'.format(now.strftime('%y%m%d-%H%M%S'), f_name))
このコードを実行すると、Pythonファイルと同じ階層にtest.txt
ファイルが存在した場合、200521-215328-test.txt
というもとのファイルに現在の日時を付け足した名前のファイルが作成されます。
この使い方から考えると、WordPressのバックアップをとるプラグインなどで使われてそうな感じがします。
いろいろなアプリで現在日時を取得することはあるかと思うので、datetime
モジュールは、非常に使用頻度の高いモジュールであると言えるでしょう。
入門編が終了
酒井さんの講座は、これで入門編が終了して、いよいよ実践編に入っていきます。
もちろん、もっとたくさんのライブラリやファイルの操作があるわけですが、基本的なことは一通り学習したと考えてもいいでしょう。
これからはどんどん実践して、わからないことは公式ドキュメントやWebで調べながら、自分で解決していくことが求められます。
ここまでは、例示されているコードを観て学習するだけのいわゆる写経的な学習でしたが、これからは、学習した内容を自分で組み立てながら、コードを組み立てていく学習に入るので、まずは自分で考えてコードを書いて、それをどれだけ見やすいコードにできるかという作業の繰り返しになります。
正解はないので、一度きちんと作動したからと言って、それで完成にするのではなく、より見やすくシンプルなコードが書けるよう頭を使っていこうと思います。
それでは、明日もGood Python!