1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ディレクトリツリーと作成日時などのメタデータを取り出す python module

Posted at

TL;DR

入力されたディレクトリ以下のディレクトリと下記メタデータを取り出して JSON 形式で出力する Python module を作成しました。

項目 説明
type "Directory" or "File"
parent 親ディレクトリの名前
basename ファイルのベース名
hasPart ディレクトリの場合、格納されているファイルとディレクトリのリスト
contentSize ファイルサイズ (bytes)
creationDatetime 作成日時
modificationDatetime 更新日時

背景

ディレクトリツリーを出力するコマンドと言えば tree です。作成日時やファイルサイズなどを確認したいときは ls コマンドがよく利用されるでしょう。これらの両方を一覧で取得したい、そんな場面に私が遭遇しました。

これらのコマンドと他の様々なコマンドを組み合わせて、指定されたディレクトリ内のディレクトリおよびファイルのメタデータ(ファイルのベース名、サイズ、作成日時など)を取り出すことはできると思います。しかしながら CLI に不慣れな私にとってそれを作ることは正直面倒でした。それよりも普段使いしている Python を利用する方が楽だと感じ、コマンドラインツールを作りました。下記 GitHub リポジトリにて公開しています。

Surpris/directory-structure-py

インストール方法

リポジトリから直接インストール

pip install git+https://github.com/Surpris/directory-structure-py.git

ポータブル(Windows のみ)

2024/11/9 時点では v0.1-portable で Windows 用 exe ファイルをリリースしています。そちらをダウンロードして展開することで利用可能です。展開先には batch ファイルと exe ファイルが入っていますが、batch ファイルの方にディレクトリツリーを取り出したいフォルダ or ファイルを drag & drop することで利用可能です。

使い方(pip インストールした場合)

基本的には python -m で使用できます。

python -m directory_structure_py <file_or_directory_path> \
    --dst <output_path> \
    --include_root_path \ // option
    --in_tree \ // option
    --to_tsv // option

オプションの説明は次の通りです。

オプション 説明
dst 出力先ファイルパス。このオプションがない場合、入力されたディレクトリまたはファイルが存在するディレクトリに結果が出力されます。
include_root_path オプションが付いている場合、入力されたディレクトリまたはファイルのフルパスを含める。
in_tree オプションが付いている場合、hasPart の中にディレクトリ内のデータのメタデータが含まれる形で出力されます。
to_tsv オプションが付いている場合、TSV 形式でも結果を出力します。

アルゴリズムの説明

複雑な処理は入れていません。核となる関数は次の四つです。

get_metadata_of_single_file

この関数は pathlib.Path クラスを利用してディレクトリまたはファイルのメタデータを取り出し、Dict 形式で出力します。

get_metadata_of_files_in_list_format

この関数は再帰型関数です。get_metadata_of_single_file を使って取り出されたメタデータをリストにして出力します。メタデータリストは contents キーに格納されます。

_construct_tree

この関数は再帰型関数です。get_metadata_of_files_in_list_format により出力されるメタデータリストに基づき、各ディレクトリの hasPart に含まれる名前に対応するディレクトリまたはファイルのメタデータを、そのメタデータリストから引っ張ってきて hasPart 内の名前と置き換えます。

list2tree

この関数は _construct_tree のラッパー関数です。_construct_tree により出力されるメタデータツリーを contents キーの値として格納し、結果を出力します。

まとめ

本記事では私が作成した、ディレクトリと pathlib.Path で取得できるメタデータを取り出して JSON 形式で出力する Python module である directory-structure-py を紹介しました。このツールの出力結果は JSON 形式であり、これをヒトが見やすい形式で表示するツールの追加も検討しています。このツールの不具合や機能要望があればぜひ Issues に投稿いただければ幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?