Pythonでファイルの作成日、修正日、時間を取得するには?

ファイルの作成日と変更日に基づいていくつかの処理を行う必要があるスクリプトがありますが、LinuxとWindowsで動作させる必要があります。

Pythonでファイルの作成日や更新日を取得するための最適な クロスプラットフォーム 方法は何ですか?

いくつかの選択肢があります。1つは、os.path.getmtime`os.path.getctime`関数を使う方法です。

import os.path, time
print("last modified: %s" % time.ctime(os.path.getmtime(file)))
print("created: %s" % time.ctime(os.path.getctime(file)))

もう一つの選択肢は、os.statを使うことです。

import os, time
(mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(file)
print("last modified: %s" % time.ctime(mtime))

注意:ctime()`は、*nixシステムでは作成時間ではなく、inodeデータが最後に変更された時間を参照しています。(興味深いブログ記事へのリンクを提供して、コメントでこの事実をより明確にしてくれたkojiroさんに感謝します)

解説 (3)

os.stat https://docs.python.org/2/library/stat.html#module-stat

edit: より新しいコードでは、おそらく os.path.getmtime() を使うべきでしょう (Christian Oudard氏に感謝) ただし、これは(OSがサポートしていれば)秒数の端数を持つtime_tの浮動小数点値を返すことに注意してください。

解説 (2)

mod timeを取得するには、os.path.getmtime()またはos.stat()の2つの方法がありますが、ctimeはクロスプラットフォームでは信頼できません(下記参照)。

os.path.getmtime()

getmtime(path)
。 *パスの最終更新時刻を返します。返却値は、エポックからの秒数を示す数値です。 戻り値は、エポックからの秒数を示す数値です(timeモジュールを参照)。ファイルが存在しない場合やアクセスできない場合は、os.errorを発生させます。 ファイルが存在しないか、アクセスできない場合は os.error を返します。バージョン 1.5.2 で追加されました。バージョン 2.3 で変更された点: もし os.stat_float_times()がTrueを返した場合、結果は浮動小数点数となります。

os.stat()

stat(path)
パスを指定してstat()システムコールを実行します。戻り値は、stat()のメンバーに対応する属性を持つオブジェクトです。 属性が stat 構造体のメンバーに対応するオブジェクトです。 ビット)、st_ino(inode番号)、st_dev(デバイス)、st_nlink(ハードリンクの数)、st_uid (st_uid(所有者のユーザーID)、st_gid(所有者のグループID)、st_size(ファイルのサイズ、単位:バイト)。 st_atime(直近のアクセス時刻)、st_mtime(直近のコンテンツ変更時刻)、st_ctime st_ctime (プラットフォームに依存。Unixでは最新のメタデータ変更時、Windowsでは作成時):

>>> import os
>>> statinfo = os.stat('somefile.txt')
>>> statinfo
(33188, 422511L, 769L, 1, 1032, 100, 926L, 1105022698,1105022732, 1105022732)
>>> statinfo.st_size
926L
>>> 

上記の例では、statinfo.st_mtimeまたはstatinfo.st_ctimeを使用して、それぞれmtimeとctimeを取得します。

解説 (0)