はじめに
Qiita-CLI を使っていると md ファイルが多くなりすぎて管理ができなくなってしまう.
もちろん,後に編集はできるようにしたいのですべて public フォルダにおいておきたい.(md ファイルが public フォルダにないとプレビューがみれない)
そのため,ファイル名を正規化して,ツリー構造を作成することでどのような記事があるかを一目でわかるようにする.
part2 でよりアップデートしているので,そちらも参照してください.
最終的に
ファイル構造
public
│ 00_HowTo.md
│ math_Fourie.md
│ _aws_ec2.md
│ _aws_vpc.md
│ _eng_AM.md
│ _eng_equLowRangeSystem.md
│ _eng_FMPM.md
│ _llm_Bard_Bard.md
│ _llm_chatGPT_IphoneShortcut.md
│ _llm_GithubCopilot_noAnswer.md
│ _math_Laplace.md
│ _programming_mock.md
│ _py_qiitafile.md
│ __docs.md
│
└─.remote
11111111111111111111.md
22222222222222222222.md
.remote フォルダは公開している記事のものなので無視
この時出力は
├─
│ └─ *docs.md---title: memo
├─ 00
│ └─ HowTo.md---title: How To Write Blogs with Qiita-CLI
├─ aws
│ ├─ *ec2.md---title: About AWS EC2
│ └─ *vpc.md---title: About AWS VPC
├─ eng
│ ├─ *AM.md---title: 等価低域系
│ └─ *FMPM.md---title: 角度変調(FM・PM)
├─ llm
│ ├─ *bard.md---title: Bard
│ └─ chatGPT
│ └─ *IphoneShortcut.md---title: Use ChatGPT with Iphone Shortcut App
├─ math
│ ├─ *Laplace.md---title: ラプラス変換
│ └─ Fourie.md---title: フーリエ変換を信号処理の観点から理解する
├─ programming
│ └─ *mock.md---title: Test with Mock or Stub
└─ py
└─ *qiitafile.md---title: Qiita-CLIで作ったmdファイルを整理する
出力のポイントは以下の通り
-
ディレクトリはブログのジャンル
-
タイトルも書いてあるとわかりやすいのでタイトルも---に続けて出力
タイトルは各 md ファイルの 2 行目としている.
タイトルなどを書いていないとプレビューでエラーが出るので 2 行目にタイトルがあることは前提とする
- ファイル名の前に * があるのは未投稿のファイル
ファイル名の付け方
まず,ファイル名を正規化する
ポイントは
- はじめに _ とつけていたら,未投稿
:::note info
_ とつけると VSCode ではファイルが上にくる
::: - _ でジャンル(フォルダ)をわける
- ジャンルは大きい順に書く
:::note info
aws の ec2 の startup という記事であればaws_ec2_startup.md
:::
python コードを書く
結果はこちら
import glob
import os
import numpy as np
def print_tree(folder_files):
tree = {}
for file in folder_files:
parts = file.split('_')
node = tree
for part in parts:
node = node.setdefault(part, {})
return tree
def print_second_line(file):
with open(file, 'r') as f:
return f.readlines()[1].rstrip('\n')
def print_tree_structure(tree, indent='', is_last=False):
nodes = sorted(tree)
output = ''
for i, node in enumerate(nodes):
if i == len(nodes) - 1:
output += indent + '└─ ' + node + '\n'
if tree[node]:
output += print_tree_structure(tree[node], indent + ' ', is_last=True)
else:
output += indent + '├─ ' + node + '\n'
if tree[node]:
output += print_tree_structure(tree[node], indent + '│ ')
return output
md_files = glob.glob('public/*.md')
folder_files = []
for file in md_files:
file_name = os.path.basename(file)
if file_name.startswith('_'):
file_name = file_name[1:]
file_name = file_name.rsplit('_', 1)[0] + '_*' + file_name.rsplit('_', 1)[1] if '_' in file_name else file_name
folder_structure = os.path.dirname(file_name)
tmp = os.path.join(folder_structure, os.path.basename(file_name))
title = print_second_line(file)
if title is not None:
folder_files = np.append(folder_files, tmp + '---' + title)
else:
folder_files = np.append(folder_files, tmp)
tree = print_tree(folder_files)
print(print_tree_structure(tree))
これで出力結果が出る.
もう少し楽に書けそうだが,できていればなんでもいいのでこのままでいいでしょう
この出力結果をファイルに書き込んだり追記したりすることで管理がより楽になりそうかも