从 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)*' ' + '- ',