1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

markdownからコードブロックを抽出してファイルに書き込むプログラム md2file.py

Last updated at Posted at 2024-11-08

タイトル通りです。
複数のMarkdownファイルから、コードブロックを抽出し、ファイルに保存します。

ファイル名がダブっていたら、上書きしてしまいます。

Designed BY T.Maekawa
Code BY Google AI studio and T.Maekawa
Check By T.Maekawa

google AI studioのコードはPDSなので勝手に使っていいと書いてあったけれど、クレジットを入れました。

md2file.py
#!/usr/bin/python
import re
import os
import sys

def extract_code_blocks(markdown_files, output_dir="extracted_code"):
    """
    複数のMarkdownファイルからコードブロックを抽出し、ファイルに保存します。

    Args:
        markdown_files: Markdownファイルのパスを格納したリスト。
        output_dir: 抽出したコードを保存するディレクトリ。
    """

    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    cnt=0
    for markdown_file in markdown_files:
        with open(markdown_file, 'r', encoding='utf-8') as f:
            content = f.read()

        # ```filename と ``` で囲まれた部分を抽出
        matches = re.findall(r"```(.*?)\n([\s\S]*?)```", content)

        for match in matches:
            path = match[0].strip()  # ファイル名部分を抽出
            filename = os.path.basename(path)
            code = match[1]

            # ファイル名がない場合。
            if filename=="":
                filename=f"file{cnt:0{5}}"
                cnt+=1

            if ":" in filename:
                filename = filename.split(":")[1]

            filepath = os.path.join(output_dir, filename)
            with open(filepath, 'w', encoding='utf-8') as outfile:
                outfile.write(code)
            print(f"コードブロックを {filepath} に保存しました。")


if __name__ == "__main__":
    markdown_files = sys.argv[1:]
    extract_code_blocks(markdown_files)
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?