从 python 中包含降价文件的递归文件夹自动生成降价索引
Autogenerate Markdown index from a recursive folder with makdown files in python
您好,我有一个文件夹,其中包含许多带有降价 (.md) 文件的子文件夹,我想为此生成一个索引。我试试这个
MD_FILE_LIST = (y for x in os.walk(DOC_FILES_DIR)
for y in glob(os.path.join(x[0], '*.md')))
with open(DOC_FILES_DIR + 'index.md', 'w') as f:
text = []
for m_file in MD_FILE_LIST:
text.append('%s[%s](/%s)\n' % (m_file.count(os.sep)*' ',
m_file.split(os.sep)[-1].replace('.md', ''),
m_file.replace(DOC_FILES_DIR, '').replace(os.sep,'/')))
f.writelines(text)
但是生成的文件没有显示链接的 html 视图,它显示为纯文本 [name](url)
。如图所示
如果可能的话,至少为 2 或 3 个第一级创建一个标题
新版本
我做了一些修复,现在看起来像 THIS 这是我的更新版本代码:
with open(DOC_FILES_DIR + 'README.md', 'w') as f:
text = []
for m_file in MD_FILE_LIST:
levels = m_file.replace(DOC_FILES_DIR, '').count(os.sep)
if levels < 3:
text.append( ' * ' + '#' * levels + ' [%s](./%s)\n' % (
m_file.split(os.sep)[-1].replace('.md', ''),
m_file.replace(DOC_FILES_DIR, '').replace(os.sep,'/')))
else:
text.append('%s[%s](./%s)\n' % (m_file.count(os.sep)*' ' + '- ',
m_file.split(os.sep)[-1].replace('.md', ''),
m_file.replace(DOC_FILES_DIR, '').replace(os.sep, '/')))
text[0] = "# Index\n"
f.writelines(text)
但是我好像不能同时使用标题和列表
每个列表项之间需要一个空行。
严格阅读Markdown rules表明块级元素不能包含在列表项中,除非它是"loose"列表,即被空行包围。例如,考虑这个简单的列表:
* Item 1
* Item 2
它被呈现为:
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
请注意,列表项的内容作为内联文本插入。没有块级结构。
但是,这个列表:
* Item 1
* Item 2
呈现为:
<ul>
<li>
<p>Item 1</p>
</li>
<li>
<p>Item 2</p>
</li>
</ul>
请注意,每个列表项的内容都放在块级段落中 (<p>
)。唯一的区别是在项目之间添加了一个空行。
同样的技术可以用于其他块级构造。例如,要在 Markdown 中制作标题,您可以在文本前面加上许多哈希值和至少一个 space:
* # Item 1
* # Item 2
这导致:
<ul>
<li>
<h1>Item 1</h1>
</li>
<li>
<h1>Item 2</h1>
</li>
</ul>
现在让我们尝试使用文档的前几行:
# Index
* ## [combustionModel](./combustionModels/combustionModel/combustionModel.md)
* ## [diffusion](./combustionModels/diffusion/diffusion.md)
* ## [FSD.T](./combustionModels/FSD/FSD.T.md)
- [consumptionSpeed](./combustionModels/FSD/reactionRateFlameAreaModels/consumptionSpeed/consumptionSpeed.md)
- [reactionRateFlameArea](./combustionModels/FSD/reactionRateFlameAreaModels/reactionRateFlameArea/reactionRateFlameArea.md)
- [relaxation](./combustionModels/FSD/reactionRateFlameAreaModels/relaxation/relaxation.md)
* ## [infinitelyFastChemistry](./combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.md)
呈现为:
<h1>Index</h1>
<ul>
<li>
<h2><a href="./combustionModels/combustionModel/combustionModel.md">combustionModel</a></h2>
</li>
<li>
<h2><a href="./combustionModels/diffusion/diffusion.md">diffusion</a></h2>
</li>
<li>
<h2><a href="./combustionModels/FSD/FSD.T.md">FSD.T</a></h2>
<ul>
<li><a href="./combustionModels/FSD/reactionRateFlameAreaModels/consumptionSpeed/consumptionSpeed.md">consumptionSpeed</a>
</li>
<li><a href="./combustionModels/FSD/reactionRateFlameAreaModels/reactionRateFlameArea/reactionRateFlameArea.md">reactionRateFlameArea</a>
</li>
<li><a href="./combustionModels/FSD/reactionRateFlameAreaModels/relaxation/relaxation.md">relaxation</a>
</li>
</ul>
</li>
<li>
<h2><a href="./combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.md">infinitelyFastChemistry</a></h2>
</li>
</ul>
请注意,我在嵌套列表(没有 headers)中留下空行,因此这些列表项不会包含在段落中。如果您更喜欢段落,那么也只需在其中包含空行。
对您的代码进行编辑非常简单。只需在第六行添加一个额外的 \n
:
text.append( ' * ' + '#' * levels + ' [%s](./%s)\n\n' % (
以及第 14 行(虽然技术上没有要求,但在 Markdown 中 header 之后总是有一个空行是一种很好的形式):
text[0] = "# Index\n\n"
如果你希望嵌套的子列表是块级的,还有第 10 行:
text.append('%s[%s](./%s)\n\n' % (m_file.count(os.sep)*' ' + '- ',
您好,我有一个文件夹,其中包含许多带有降价 (.md) 文件的子文件夹,我想为此生成一个索引。我试试这个
MD_FILE_LIST = (y for x in os.walk(DOC_FILES_DIR)
for y in glob(os.path.join(x[0], '*.md')))
with open(DOC_FILES_DIR + 'index.md', 'w') as f:
text = []
for m_file in MD_FILE_LIST:
text.append('%s[%s](/%s)\n' % (m_file.count(os.sep)*' ',
m_file.split(os.sep)[-1].replace('.md', ''),
m_file.replace(DOC_FILES_DIR, '').replace(os.sep,'/')))
f.writelines(text)
但是生成的文件没有显示链接的 html 视图,它显示为纯文本 [name](url)
。如图所示
如果可能的话,至少为 2 或 3 个第一级创建一个标题
新版本
我做了一些修复,现在看起来像 THIS 这是我的更新版本代码:
with open(DOC_FILES_DIR + 'README.md', 'w') as f:
text = []
for m_file in MD_FILE_LIST:
levels = m_file.replace(DOC_FILES_DIR, '').count(os.sep)
if levels < 3:
text.append( ' * ' + '#' * levels + ' [%s](./%s)\n' % (
m_file.split(os.sep)[-1].replace('.md', ''),
m_file.replace(DOC_FILES_DIR, '').replace(os.sep,'/')))
else:
text.append('%s[%s](./%s)\n' % (m_file.count(os.sep)*' ' + '- ',
m_file.split(os.sep)[-1].replace('.md', ''),
m_file.replace(DOC_FILES_DIR, '').replace(os.sep, '/')))
text[0] = "# Index\n"
f.writelines(text)
但是我好像不能同时使用标题和列表
每个列表项之间需要一个空行。
严格阅读Markdown rules表明块级元素不能包含在列表项中,除非它是"loose"列表,即被空行包围。例如,考虑这个简单的列表:
* Item 1
* Item 2
它被呈现为:
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
请注意,列表项的内容作为内联文本插入。没有块级结构。
但是,这个列表:
* Item 1
* Item 2
呈现为:
<ul>
<li>
<p>Item 1</p>
</li>
<li>
<p>Item 2</p>
</li>
</ul>
请注意,每个列表项的内容都放在块级段落中 (<p>
)。唯一的区别是在项目之间添加了一个空行。
同样的技术可以用于其他块级构造。例如,要在 Markdown 中制作标题,您可以在文本前面加上许多哈希值和至少一个 space:
* # Item 1
* # Item 2
这导致:
<ul>
<li>
<h1>Item 1</h1>
</li>
<li>
<h1>Item 2</h1>
</li>
</ul>
现在让我们尝试使用文档的前几行:
# Index
* ## [combustionModel](./combustionModels/combustionModel/combustionModel.md)
* ## [diffusion](./combustionModels/diffusion/diffusion.md)
* ## [FSD.T](./combustionModels/FSD/FSD.T.md)
- [consumptionSpeed](./combustionModels/FSD/reactionRateFlameAreaModels/consumptionSpeed/consumptionSpeed.md)
- [reactionRateFlameArea](./combustionModels/FSD/reactionRateFlameAreaModels/reactionRateFlameArea/reactionRateFlameArea.md)
- [relaxation](./combustionModels/FSD/reactionRateFlameAreaModels/relaxation/relaxation.md)
* ## [infinitelyFastChemistry](./combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.md)
呈现为:
<h1>Index</h1>
<ul>
<li>
<h2><a href="./combustionModels/combustionModel/combustionModel.md">combustionModel</a></h2>
</li>
<li>
<h2><a href="./combustionModels/diffusion/diffusion.md">diffusion</a></h2>
</li>
<li>
<h2><a href="./combustionModels/FSD/FSD.T.md">FSD.T</a></h2>
<ul>
<li><a href="./combustionModels/FSD/reactionRateFlameAreaModels/consumptionSpeed/consumptionSpeed.md">consumptionSpeed</a>
</li>
<li><a href="./combustionModels/FSD/reactionRateFlameAreaModels/reactionRateFlameArea/reactionRateFlameArea.md">reactionRateFlameArea</a>
</li>
<li><a href="./combustionModels/FSD/reactionRateFlameAreaModels/relaxation/relaxation.md">relaxation</a>
</li>
</ul>
</li>
<li>
<h2><a href="./combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.md">infinitelyFastChemistry</a></h2>
</li>
</ul>
请注意,我在嵌套列表(没有 headers)中留下空行,因此这些列表项不会包含在段落中。如果您更喜欢段落,那么也只需在其中包含空行。
对您的代码进行编辑非常简单。只需在第六行添加一个额外的 \n
:
text.append( ' * ' + '#' * levels + ' [%s](./%s)\n\n' % (
以及第 14 行(虽然技术上没有要求,但在 Markdown 中 header 之后总是有一个空行是一种很好的形式):
text[0] = "# Index\n\n"
如果你希望嵌套的子列表是块级的,还有第 10 行:
text.append('%s[%s](./%s)\n\n' % (m_file.count(os.sep)*' ' + '- ',