こんにちは、菱沼です。
「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます。
前回は、Pythonに付属している統合開発環境IDLEを利用したPythonのプログラムの実行方法について学びました。
今回からは、「Chapter1-4 日時計算でプログラムの実行に慣れよう」に入ります。この章では、プログラミングに慣れるためdatetimeモジュールを使うことになります。なので今回は、datetimeモジュールとは何かと、モジュールを使う時に必要なimport文について学びたいと思います。
日時計算をするdatetimeモジュールを使ってみよう。
この章は、Pythonプログラムの実行に慣れるために、「datetimeモジュール」を使って、簡単な日時計算をしてみようということのようです。
冒頭で現在時刻を取得する方法が書かれています。
————————
P.22
最初にPythonで現在時刻を取得する方法を確認してみましょう。
(中略)
1の部分では日時に関するdatetimeモジュールにあるdatetimeオブジェクトを使うことを宣言します。そして、2の部分では、datetime.nowメソッドを呼び出して、現在日時を取得して表示します。なお、nowメソッドの戻り値は、datetime.datetime型のオブジェクトです。紛らわしいですが、これはdatetimeモジュールで定義されているdatetimeオブジェクト型という意味です。
————————
まず、最初の行にある[from datetime import datetime]は、datetimeというPythonの標準モジュールを使えるようにするための宣言で、import文と呼ばれるものです。datetimeモジュールを使うと、Pythonで日付や日時に対する様々な操作をすることができます。
サンプルコードでは、datetimeモジュールをインポートして使えるようにした後に、今の日時を表示させるという事をしています。
さて、ここで出てくるモジュールとは、複数の関数やクラスによって作られた、よく利用される機能(部品)を、まとめて一つのファイル(.py)にしたもののことです。今の時点では現在の日時を表示することしかしていませんが、実際にはほかの処理もこのファイルの中に含まれています。
こういったモジュールが配布されているおかげで、自分でプログラミングしなくても機能を使うことができます。自分がしたいことをできるものを探すのはちょっと大変なこともありますが、とっても便利で素敵な存在です。
補足:モジュールとライブラリとパッケージの違いは?
ちなみに、「ライブラリ」や「パッケージ」という言葉を耳にしたことがある人は多いと思います。
いくつかの「モジュール」を集めて一つにまとめたものが「パッケージ」、いくつかの「パッケージ」を集めて一つにまとめたものが「ライブラリ」です。パッケージとモジュールが同じ意味で使われているケースもあります。
ところで、「標準」という言葉があるところで察せられると思いますが、第三者が作ったサードパーティ製のものもあります。
例えば、機械学習でよく利用されるNumPyやpandasといったライブラリの名前を聞いたことがある方もいると思いますが、あれはサードパーティ製ライブラリです。
標準はPython自体に含まれていますので、import文だけで済みますが、サードパーティ製ライブラリを使いたい場合には、事前にpipコマンドによるインストールが必要です。これは後日出てきますので、そこで学びたいと思います。
外部ライブラリにどういったものがあるのかはPyPIというサイトで確認いただけます。
標準ライブラリはこちら。
https://docs.python.org/ja/3/library/index.html
import文とはなにか。
さて、import文を使うことでモジュールを使えるようしていますが、import文は他の書き方もできます。
これについては次の段落で書かれています。
————————
P.23
上記のプログラムで「frome … import …」の使い方がちょっとわかりづらいでしょうか。Import文を単純にして以下のように書き換えることもできます。
プログラムで「import datetime」と書くと、datetimeモジュールを取り込んで、プログラムの中で利用できるようにします。
そしてdatetimeモジュールにあるdatetimeオブジェクトのnowメソッドを呼び出すために「datetime.datetime.now()」と記述します。
つまり、1つ前のプログラムで「from datetime import datetime」と書いた場合には、datetimeモジュールからdatetimeオブジェクトだけをインポートして使うという意味になるので、「datetime.now()」とモジュール名を省略して書くことができます。
————————
datetimeが続きすぎてちょっと目が錯覚を起こしそうですが…。
ここまででimport文の書き方には2種類でてきています。
①from モジュール名 import オブジェクト名/クラス名/関数名
ライブラリの中から指定したものだけをインポートする
②import モジュール名/ライブラリ名
ライブラリ全体をインポートする
一つ目のサンプルコードは①の書き方で書かれています。
となっていますので、datetimeモジュールの中から、datetimeオブジェクトだけをインポートしています。
なので、datetimeオブジェクトの中の、nowというメソッドを使いたい場合には「t = datetime.now()」と書くだけで済みます。
一方、二つ目のサンプルコードは、②の書き方で書かれています。
となっていますので、datetimeモジュールすべてをインポートしているということになります。
なので、一つ目と同じようにnowメソッドを使うには、datetimeモジュールの、datetimeオブジェクトの中の、nowというメソッドを使うという意味で、[t = datetime.datetime.now()]と書く必要が出てきます。
一つ目の方がちょっと短縮できているのですが、言ってしまえば、datetimeオブジェクトしか使えないので、他のオブジェクトを使う予定があるなら全体をインポートした方が良いという事になります。
一応、①from~import文は、「,」で区切って二つ以上のオブジェクトを同時にインポートすることはできるようです。
ちなみに②のただのimport文は、「,」で複数のモジュール/ライブラリを同時にインポートすることはできるらしいですが、pep8というPythonのお作法的にはNGなので、2行に分けて書くことが推奨されています。
ところで、何度もモジュール名やライブラリ名の正式名称を書くの面倒ですよね。短縮できます。
[import モジュール名/ライブラリ名 as 短縮名]
as ●●とすることで、任意の名称を付けられます。あだ名ですね。使い方はこんな感じ。
datetimeモジュールはdtというあだ名をつけられましたので、[dt.datetime.now()]と書くことができます。
ただ、注意しなくてはならないのは、そのプログラムの中ではずーーーっとつけたあだ名で進める必要があることです。途中から正式名称や他の名前で書くことはできませんので、変えたいときは元のimport文から直す必要があります。
それではきりが良いので今回はこちらで終了です。お付き合いいただき、ありがとうございました。
Pythonの自動化で業務の効率化を図りたい方は、グローバルウェイに依頼してみてはいかがでしょうか?興味がある方は以下をご覧の上、是非お問い合わせください。