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