はじめに
ファイルやフォルダの階層構造をエクセルファイルにエクスポートするためのプログラムを解説します。
作成したプログラムでは、フォルダ名に「/」を追加し、フォントを変更することで視覚的な整理を行います。これにより、フォルダ名は太字で表示され、階層構造が一目で把握しやすくなります。
下記の画像は、実際に作成されるエクセルファイルのイメージです。

前提条件(検証時のPCの状態)
- OS: macOS Sonoma
- Python: ver3.7.4 (バージョンに細かな指定がありませんが、Pythonが実行できる環境が必要です)
- Homebrew: ver4.2.1 (バージョンに細かな指定がありませんが、treeコマンドとjqコマンドがインストール可能な環境が必要です)
① 必要なパッケージのインストール
treeコマンドのインストール
brew install tree
treeコマンドは、ディレクトリやフォルダ階層化して表示するコマンドです
jqコマンドのインストール
brew install jq
jqコマンドは、JSONデータの処理と操作を行うためのコマンドです
OpenPyXLのダウンロード
pip install openpyxl
OpenPyXLは、PythonでExcelファイルを操作するためのライブラリです。
このライブラリを使用すると、Excelファイルの作成、読み込み、編集、保存などを行うことができます。
② Pythonプログラムの作成
以下のプログラムを directory_hierarchy_exporter.py として保存します。
# coding: utf-8
import json
import sys
from openpyxl import Workbook
from openpyxl.styles import Font
INDENT = '\t'
# 再帰的にコンテンツを解析し、Excelシートに書き込む関数
def parse_content(sheet, depth, content):
name = content.get('name', '')
# フォルダの場合は名前の末尾に「/」を追加し、フォントを設定する
if content.get('type') == 'directory':
name += '/' # フォルダ名の場合は末尾に「/」を追加
font = Font(bold=True, size=14) # フォルダ名のフォントサイズを14、かつ太字に設定
else:
font = Font(size=11) # ファイル名のフォントサイズを11に設定
# インデントと名前をシートに追加する行の形式に変換
row = [''] * depth + [name]
sheet.append(row) # シートに行を追加
# 追加したセルにフォントを適用する
cell = sheet.cell(row=sheet.max_row, column=len(row))
cell.font = font
# フォルダの場合は再帰的に内容を解析
if content.get('type') == 'directory':
for c in content.get('contents', []):
parse_content(sheet, depth + 1, c)
# JSONをExcelに変換する関数
def json_to_excel():
try:
contents = json.load(sys.stdin) # 標準入力からJSONデータを読み込む
except Exception as e:
print(e) # 例外が発生した場合はエラーメッセージを表示
return
# 新しいExcelブックを作成し、アクティブなシートを設定
wb = Workbook()
sheet = wb.active
sheet.title = 'シート1' # シート名を設定
# コンテンツを解析してExcelに書き込む
for content in contents:
parse_content(sheet, 0, content)
wb.save('output.xlsx') # Excelファイルを保存
print("Excel file 'output.xlsx' created successfully.")
# メイン処理
if __name__ == '__main__':
json_to_excel()
③ Pythonを呼び出すシェルスクリプトの作成
以下のプログラムを directory_hierarchy_exporter.sh として、②のPythonプログラムと同じフォルダに保存します。
#!/bin/bash tree "$1" -J | jq . -c | python3 directory_hierarchy_exporter.py
④ シェルスクリプトの権限変更
以下のコマンドを使用して、directory_hierarchy_exporter.sh の権限を変更します。
chmod +rx ./directory_hierarchy_exporter.sh
以上ののコマンドは、directory_hierarchy_exporter.sh に対して読み取りと実行の権限を追加するコマンドです。
⑤ フォルダ階層をエクセルファイルにエクスポートする
②・③で作成したファイルのフォルダまで移動し、以下のコマンドの「エクスポートしたいフォルダのパス」を出力するフォルダのパスに修正して実行します。
./directory_hierarchy_exporter.sh エクスポートしたいフォルダのパス
これにより、output.xlsx という名前のエクセルファイルが作成されます。