48 lines
2.0 KiB
Plaintext
48 lines
2.0 KiB
Plaintext
import os
|
|
from markdown import markdown
|
|
from docx import Document
|
|
|
|
def convert_md_to_docx(md_file_path, docx_file_path):
|
|
"""Converts a Markdown file to a Word document."""
|
|
with open(md_file_path, 'r', encoding='utf-8') as md_file:
|
|
md_content = md_file.read()
|
|
|
|
# Convert Markdown to HTML
|
|
html_content = markdown(md_content)
|
|
|
|
# Create a Word document and add the HTML content
|
|
doc = Document()
|
|
doc.add_paragraph(html_content)
|
|
doc.save(docx_file_path)
|
|
print(f"Converted: {md_file_path} -> {docx_file_path}")
|
|
|
|
def convert_all_md_to_docx(root_directory, output_directory):
|
|
"""Traverse the directory tree and convert all .md files to .docx, storing them in a mirrored structure."""
|
|
for dirpath, dirnames, filenames in os.walk(root_directory):
|
|
for filename in filenames:
|
|
if filename.endswith('.md'):
|
|
md_file_path = os.path.join(dirpath, filename)
|
|
|
|
# Create mirrored directory structure in the output directory
|
|
relative_path = os.path.relpath(dirpath, root_directory)
|
|
target_dir = os.path.join(output_directory, relative_path)
|
|
os.makedirs(target_dir, exist_ok=True)
|
|
|
|
# Define the output .docx file path
|
|
docx_file_path = os.path.join(target_dir, os.path.splitext(filename)[0] + '.docx')
|
|
|
|
try:
|
|
convert_md_to_docx(md_file_path, docx_file_path)
|
|
except Exception as e:
|
|
print(f"Failed to convert {md_file_path}: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
# Prompt user for the root directory and output directory
|
|
root_dir = input("Enter the root directory to scan for Markdown files: ").strip()
|
|
output_dir = input("Enter the output directory to store converted files: ").strip()
|
|
|
|
if os.path.exists(root_dir):
|
|
os.makedirs(output_dir, exist_ok=True) # Ensure output directory exists
|
|
convert_all_md_to_docx(root_dir, output_dir)
|
|
else:
|
|
print("The specified root directory does not exist.") |