【Python】ファイル情報格納クラス(フルパスとか作成日時とか格納しとく入れ物)
ちょっとしたファイル処理とかする時、フルパスとかファイルサイズとか、ファイルのプロパティを総合的に扱う時にpathlib
を使ったり、ファイル作成日時を調べるのにos.path.getctime()
とか使い分けるのがめんどくさい。
コンストラクタにパスを渡したら、該当のファイルのそうした情報をメンバとして格納したインスタンスを作成するクラスを作った。
ソース
import os from pathlib import Path from datetime import datetime import time class FileInfo(object): """ ファイル情報 Attributes ---------- file_name : str ファイル名。 full_path : str フルパス。 dir_name : str ディレクトリ名。親ディレクトリ。 dir_path : str ディレクトリパス。親ディレクトリまでのフルパス。 size : int 容量。 extension : str 拡張子。 create_time : datetime 作成日時。 """ @staticmethod def epoch_to_datetime(epoch): """ エポック秒をdatetime型に変換 Parameters ---------- epoch : float エポック秒。 Return ---------- result : datetime エポック秒からdatetime.datetime型に変換した日時。 """ result = datetime(*time.localtime(epoch)[:6]) return result def __init__(self, path): """ Parameters ---------- path : str ファイルのみ。 """ p = Path(path) self.file_name = p.name self.full_path = str(p.resolve()) self.dir_name = p.parent.name self.dir_path = str(p.parent) self.size = os.path.getsize(path) self.extension = ''.join(p.suffixes) self.create_time = FileInfo.epoch_to_datetime(os.path.getctime(p)) self.update_time = FileInfo.epoch_to_datetime(os.path.getmtime(p)) self.last_access_time = FileInfo.epoch_to_datetime(os.path.getatime(p))
使用例
例えば、/users/test/sample.tar.gz
というファイルに対し、インスタンスを作成して各メンバにアクセスしてみるサンプル。
if __name__ == '__main__': p = Path(r"/users/test/sample.tar.gz") f = FileInfo(p) print("ファイル名: " + f.file_name) print("フルパス: " + f.full_path) print("ディレクトリ名: " + f.dir_name) print("ディレクトリパス: " + f.dir_path) print("拡張子: " + f.extension) print("サイズ: " + str(f.size) + " byte") print("作成: " + str(f.create_time)) print("更新: " + str(f.update_time)) print("最新: " + str(f.last_access_time)) """ ファイル名: sample.tar.gz フルパス: /users/test/sample.tar.gz ディレクトリ名: test ディレクトリパス: /users/test/ 拡張子: .tar.gz サイズ: 6868 byte 作成: 2018-08-15 18:33:57 更新: 2018-08-13 14:31:43 最新: 2018-08-15 18:33:57 """
注意
今の所、コンストラクタに渡されるパスは実在するファイルパスであることが前提なので、存在チェックや本当にファイルパスであるか(=ディレクトリパスではないか)といった前処理が必要。