markdown to mediawiki 转换器

处于高兼容性和低排版成本,之前一直用的是 markdown 作为主力笔记格式,最近了解了一下非线性笔记的哲学,于是开始尝试以 Obisidian 作为个人笔记的主题,而 SenyaoWiki 作为公开的 wiki 式的非线性笔记的展示。

由于 mediawiki 的格式与 markdown 略有区别,在将自己的笔记展示到 wiki 的过程中必然就会存在格式转换的问题。市面上常见的 Markdown 转换器存在或多或少的问题,于是花了 10 分钟简单写了个小脚本用于格式转换。

import argparse
import os


def markdown_to_mediawiki(input_file, output_file):
    with open(input_file, 'r', encoding='utf-8') as infile, open(output_file, 'w', encoding='utf-8') as outfile:
        for line in infile:
            # 转换加粗
            line = line.replace('**', "'''")
            # 转换标题
            if line.startswith('#'):
                level = line.count('#')
                stripped_line = line.lstrip('#').strip()
                mediawiki_heading = '=' * (level + 1) + stripped_line + '=' * (level + 1) + '\n'
                outfile.write(mediawiki_heading)
            # 转换无序列表
            elif line.strip().startswith('-'):
                mediawiki_list_item = line.replace('-', '*', 1)
                outfile.write(mediawiki_list_item)
            else:
                outfile.write(line)


def main():
    parser = argparse.ArgumentParser(description="Convert Markdown to MediaWiki format.")
    parser.add_argument('-i', '--input', required=True, help="Input Markdown file name.")
    parser.add_argument('-o', '--output', help="Output MediaWiki file name. Optional.")

    args = parser.parse_args()

    input_file = args.input
    output_file = args.output if args.output else os.path.splitext(input_file)[0] + '.txt'

    markdown_to_mediawiki(input_file, output_file)
    print(f"Converted {input_file} to {output_file} successfully.")


if __name__ == "__main__":
    main()

使用时,只需要指定输入文件和输出文件(可选)即可

python main.py -i example.md

参见 GitHub


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注