提交 b7459075 编写于 作者: 小小明-代码实体's avatar 小小明-代码实体

更新Markdown目录提取工具.exe, md_extract.py

上级
"""
小小明的代码
CSDN主页:https://blog.csdn.net/as604049322
"""
__author__ = '小小明'
__time__ = '2021/11/6'
import glob
import os
import sys
import PySimpleGUI as sg
import cchardet
import pyperclip
def load_md(filename, min_level=1):
with open(filename, "rb") as f:
md_bytes = f.read()
encoding = cchardet.detect(md_bytes)['encoding']
if encoding is None:
encoding = "u8"
md = md_bytes.decode(encoding)
code_area = False
result = []
for line in md.splitlines():
if line.startswith("```"):
code_area = not code_area
if code_area or not line.startswith("#") or line.find(" ") == -1:
continue
num_sign, title = line.split(maxsplit=1)
if not title:
continue
tab_num = len(num_sign) - min_level
if tab_num < 0:
continue
result.append("\t" * tab_num + title)
return result
sg.change_look_and_feel("Python")
layout = [
[
sg.Text("文件夹位置:"),
sg.In(size=(18, 1), key="dirname", default_text="."),
sg.FolderBrowse('...', target='dirname', initial_folder=".."),
sg.Checkbox('递归加载\n子目录', key="recursion", default=False),
sg.Button('加载Markdown文件名列表', enable_events=True, key="load_md_filename"),
sg.Text("加载条数:\n 0 ", key="show_num", text_color="lightblue"),
sg.Text("最小标题级别:"),
sg.In(size=(2, 1), key="min_level", default_text="1"),
# sg.FileSaveAs('导出链接', enable_events=True, key="out_urls", target="out_urls",
# file_types=(('txt', '.txt'), ('csv', '.csv'), ('tsv', '.tsv'))),
sg.FolderBrowse('批量导出', enable_events=True, key="output", target="output", tooltip="先选择导出的位置"),
# sg.Button('批量导出', enable_events=True, key="output"),
sg.Button('清空日志', enable_events=True, key="clear"),
],
[sg.Column([[sg.Listbox(values=[], size=(57, 30), key="name_list", text_color="#bb8b59", enable_events=True,
select_mode='LISTBOX_SELECT_MODE_BROWSE')]]),
sg.VSeperator(),
sg.Column([[sg.Output(size=(57, 32), key="out", text_color="#29db6f")]])
],
[sg.Text("@小小明:https://blog.csdn.net/as604049322"), ],
]
def resource_path(relative_path):
base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
return os.path.join(base_path, relative_path)
window_title = 'Markdown目录提取工具 v0.1'
window = sg.Window(window_title, layout, icon=resource_path("./md.ico"))
cache = {}
while True:
event, values = window.read()
# print(event, values)
if event in (None,):
break # 相当于关闭界面
if event == "load_md_filename":
dirname = values["dirname"].strip("/\\")
if values["recursion"]:
md_names = f"{dirname}/**/*.md"
else:
md_names = f"{dirname}/*.md"
filenames = glob.glob(md_names)
cache.clear()
for filename in filenames:
name = os.path.basename(filename)
cache[name] = filename
window["name_list"].update(cache.keys())
window["show_num"].update(f"加载条数:\n{len(filenames):^12d}")
elif event == "clear":
window["out"].update("")
elif event == "name_list":
name_list_ = values['name_list']
if len(name_list_) == 0:
continue
name = name_list_[0]
if name not in cache:
continue
filename = cache[name]
md_lines = load_md(filename, int(values["min_level"]))
print("----------------------------------------------------------------------------------")
print("文件名:", name)
print("----------------------------------------------------------------------------------")
pyperclip.copy("\n".join(md_lines))
print("\n".join(md_lines[:25]))
print("展示目录前25行,完整目录已复制到剪切板")
print("\n")
elif event == "output":
output = values['output']
if not output:
print("取消选择,已终止导出操作!")
continue
print("导出位置:", output)
for name, filename in cache.items():
md_lines = load_md(filename, int(values["min_level"]))
name, ext = os.path.splitext(name)
with open(f"{output}/{name}.txt", "w", encoding="u8") as f:
f.write("\n".join(md_lines))
print(name, "导出完毕!")
os.system(f"cmd /c start {os.path.abspath(output)}")
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册