#!/usr/bin/env python3 """Extract all prompts from awesome-nano-banana-pro-prompts.md into CSV.""" import re import csv from pathlib import Path def extract_prompts(md_content: str) -> list[dict]: """Extract all prompts with their metadata.""" prompts = [] # Split by prompt entries (### No. X:) entries = re.split(r'### No\. \d+:', md_content) for i, entry in enumerate(entries[1:], 1): # Skip content before first entry prompt_data = { "id": i, "title": "", "category": "", "description": "", "prompt": "", "author": "", "source": "", } # Extract title (first line after split) title_match = re.search(r'^([^\n]+)', entry.strip()) if title_match: prompt_data["title"] = title_match.group(1).strip() # Extract category from badges categories = re.findall(r'!\[([^\]]+)\]\([^)]+badge[^)]*\)', entry) if categories: # Filter out non-category badges cats = [c for c in categories if c not in ["Featured", "Raycast", "Language-ZH", "Language-EN", "Language-JA"]] prompt_data["category"] = ", ".join(cats[:3]) if cats else "" # Extract description desc_match = re.search(r'#### 📖 Description\s*\n\n([^\n#]+)', entry) if desc_match: prompt_data["description"] = desc_match.group(1).strip() # Extract prompt (between ``` markers after "#### 📝 Prompt") prompt_section = re.search(r'#### 📝 Prompt\s*\n\n```[^\n]*\n(.*?)```', entry, re.DOTALL) if prompt_section: prompt_data["prompt"] = prompt_section.group(1).strip() # Extract author author_match = re.search(r'\*\*Author:\*\*\s*\[([^\]]+)\]', entry) if author_match: prompt_data["author"] = author_match.group(1).strip() # Extract source URL source_match = re.search(r'\*\*Source:\*\*\s*\[([^\]]+)\]\(([^)]+)\)', entry) if source_match: prompt_data["source"] = source_match.group(2).strip() if prompt_data["prompt"]: # Only add if we found a prompt prompts.append(prompt_data) return prompts def save_to_csv(prompts: list[dict], output_path: Path): """Save prompts to CSV file.""" fieldnames = ["id", "title", "category", "description", "prompt", "author", "source"] with open(output_path, 'w', newline='', encoding='utf-8') as f: writer = csv.DictWriter(f, fieldnames=fieldnames, quoting=csv.QUOTE_ALL) writer.writeheader() for p in prompts: writer.writerow(p) print(f"Saved {len(prompts)} prompts to {output_path}") def main(): script_dir = Path(__file__).parent md_path = script_dir.parent / "references" / "awesome-nano-banana-pro-prompts.md" csv_path = script_dir.parent / "data" / "awesome-prompts.csv" print(f"Reading from: {md_path}") with open(md_path, 'r', encoding='utf-8') as f: content = f.read() prompts = extract_prompts(content) print(f"Extracted {len(prompts)} prompts") # Print sample if prompts: print("\nSample prompts:") for p in prompts[:3]: print(f"\n[{p['id']}] {p['title'][:50]}...") print(f" Category: {p['category']}") print(f" Prompt: {p['prompt'][:100]}...") save_to_csv(prompts, csv_path) if __name__ == "__main__": main()