Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小小明-代码实体
python_gui
提交
b7459075
P
python_gui
项目概览
小小明-代码实体
/
python_gui
通知
199
Star
11
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
python_gui
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
b7459075
编写于
11月 06, 2021
作者:
小小明-代码实体
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新Markdown目录提取工具.exe, md_extract.py
上级
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
123 addition
and
0 deletion
+123
-0
Markdown目录提取工具.exe
Markdown目录提取工具.exe
+0
-0
md_extract.py
md_extract.py
+123
-0
未找到文件。
Markdown目录提取工具.exe
0 → 100644
浏览文件 @
b7459075
文件已添加
md_extract.py
0 → 100644
浏览文件 @
b7459075
"""
小小明的代码
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
):
^
12
d
}
"
)
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录