Pythonで現在の日時を取得して指定のフォーマットの文字列に変換する


now

photo credit: Exile on Ontario St Now on via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

プログラミング初心者&Windowsユーザー向けにPythonでフォルダ圧縮ツールを作る方法をお伝えしています。

前回の記事はコチラでした。

Pythonで指定フォルダ配下のサブフォルダとファイルを全てZIP圧縮する方法
プログラミング初心者&Windowsユーザー向けにPythonでZIP圧縮するツールの作り方をお伝えしています。今回は、Pythonで指定のフォルダ配下をまとめてZIP圧縮するツールの作り方です。

フォルダ配下を全てZIP圧縮する方法をお伝えしました。

さて、前回作ったツールなのですが、動作させるたびに上書きでZIPファイルを生成する仕組みになっています。

ただ、過去のZIPファイルを残しておきたい場合ありますよね?

そんな時のテクニックとして、例えば「test_20170910.zip」というふうに、ZIPファイル名に本日の日付を入れておけば、過去分を日単位で残しておけるということになります。

ということで、今回はPythonで現在の日時を取得して文字列に変換する方法についてお伝えします。

では、行ってみましょう!

スポンサーリンク

日付を取り扱うdatetimeモジュール

Pythonで日時を取り扱う場合は、datetimeモジュールを使います。

標準ライブラリに含まれていますので、スクリプトの冒頭でインポートすれば使用することができます。

import datetime

datetimeモジュールでは、日時についていくつかの種類のデータ型を利用することができますが、代表的なものとして以下のようなものがあります。

クラス 説明
date 日付
time 時刻
datetime 日時と時刻
timedelta 経過時間

今回は、年月日つまり日付が利用できれば良いので、dateクラスまたはdatetimeクラスを利用することになります。

以降、大は小を兼ねる的にdatetimeクラスを使いますが、その場合のメソッドの記述方法としては、モジュール名のdatetime、クラス名のdatetime、そしてメソッドをピリオドでつないで以下のようになります。

datetime.datetime.関数やメソッド

now関数で現在の日時を取得する

現在の日時を取得するには、datetime.datetime.now関数を使います。

書式はまんまで、以下の通りです。

datetime.datetime.now()

これを実行すると、現在の日時をdatetimeオブジェクトという形式で生成することができます。

試しに以下のようなスクリプトを実行してみましょう。

import datetime
now = datetime.datetime.now()
print(now) #2017-09-10 22:08:41.814136

Shellウィンドウに現在の時刻がマイクロ秒の単位まで出力されたことと思います。

datetimeオブジェクトは文字列連結できません

ですが、これを元に「test_20170910.zip」というようなファイル名を生成すべく、以下のようなスクリプトを実行すると

import datetime
now = datetime.datetime.now()
print('test_' + now)

以下エラーが発生してしまいます。

PythonのTypeError

TypeError: must be str, not datetime.datetime

strつまり文字列じゃないとダメよ、ということですね。

日時を文字列に変換する

str関数でdatetimeオブジェクトを文字列に変換

str関数を使えば、datetimeオブジェクトを文字列に変換することができます。

例えば、以下のスクリプトですね。

import datetime
now = datetime.datetime.now()
print('test_' + str(now)) #test_2017-09-10 22:13:47.289211

まあ、いいっちゃいいんえすけど、時、分、秒ましてやマイクロ秒までは不要ですね。

formatメソッドでdatetimeオブジェクトを文字列に変換

そこで、以前もお伝えしたformatメソッドを使う方法があります。

Pythonで文字列の中に変数などの値を埋め込むformatメソッドの使い方
Pythonでクリップボードを使った便利ツールを作る非エンジニア&Windowsユーザー向けのシリーズです。今回はPythonで文字列の中に変数の値を埋め込むというformatメソッドの使い方をお伝えします。

formatメソッドは対象となる文字列の指定の位置に引数の値を差し込むというものですが、引数をdatetimeオブジェクトとした場合に年、月、日などをいい感じに文字列の中に埋め込むこともできます。

例を見たほうが速いので、こちらのスクリプトをご覧ください。

import datetime
now = datetime.datetime.now()
print('test_{0:%Y%m%d}'.format(now)) #test_20170910

ファイル名として欲しい文字列が出てきました。

formatメソッドの対象とする文字列に、以下のコードを仕込むことで、その位置に指定の値を差し込むことができるようになります。

コード 説明
%d 2桁の日
%m 2桁の月
%y 2桁の年
%Y 4桁の年
%H 24時間表記の時
%I 12時間表記の時
%p AMまたはPM
%M 2桁の分
%S 2桁の秒
%f 6桁のマイクロ秒

ZIPファイル名に年月日を使用する

以上を踏まえて、フォルダのZIP圧縮ツールのファイル名に年月日を加えてみました。

こちらのスクリプトです。

import os, zipfile, datetime
now = datetime.datetime.now()
zipname = 'test_{0:%Y%m%d}.zip'.format(now)
with zipfile.ZipFile(zipname,'w') as myzip:
    for folder, subfolders, files in os.walk('test'):
        myzip.write(folder)
        for file in files:
            myzip.write(folder + "\\" + file)

実行をすると、以下のように本日の日付でZIPファイルが作成されます。

Pythonで年月日を含むファイル名にZIP圧縮

まとめ

以上、Pythonで現在の日時を取得して、指定のフォーマットの文字列に変換する方法をお伝えしました。

datetimeモジュールと、datetimeオブジェクト、now関数の使い方、formatメソッドによる文字列の変換など使いどころいっぱいのテクニックかなと思います。

さて、次回ですが、古いファイルを削除するために、ファイルの作成日時を求めてみたいと思います。

Pythonでファイルの作成日時・更新日時・アクセス日時を取得する方法
非エンジニア&Windowsユーザー向けにPythonでフォルダ内の古いファイルを自動削除するツールの作り方をお伝えしています。今回はPythonでファイルの作成日時・更新日時・アクセス日時を取得する方法です。

どうぞお楽しみに!

連載目次:初心者向け!PythonでファイルをZIP圧縮するツールを作る

複数ファイルをまとめてZIPに圧縮すると、メール添付やバックアップなどに便利です。定期的にZIP圧縮をする必要があるのであれば、Pythonに任せてしまいましょう!ツールの作り方をシリーズでお伝えしていきます。
  1. 初心者でも簡単!PythonでファイルをZIP形式に圧縮する基本のプログラム
  2. Pythonでフォルダ内のサブフォルダ&ファイルを全てリストアップする方法
  3. Pythonで指定フォルダ配下のサブフォルダとファイルを全てZIP圧縮する方法
  4. Pythonで現在の日時を取得して指定のフォーマットの文字列に変換する

タイトルとURLをコピーしました