Future-proof your skills with Linux, Python, vim & git as I share with you the most timeless and love-worthy tools in tech through my two great projects that work great together.

Using Blog Titles for Filenames

I'm excited to share that I made great progress on a blog slicing and dicing system. I managed to maintain my blogging format while also figuring out the title stuff. I now have `_counter_` posts, each with a unique filename based on the post title, as well as the title, layout, categories, and slug. Come read more to learn how I did it!

Success: Using Blog Titles for Unique Filenames

By Michael Levin

Tuesday, April 26, 2022

Made a lot of good progress yesterday on the blog slice & dice system. Just have to get that title stuff down. Okay, got it done. There are little concessions here and there because I’m keeping my blogging format mostly intact.

import dateutil
from slugify import slugify
from IPython.display import display, Markdown

h1 = lambda text: display(Markdown(f"# {text}"))
h2 = lambda text: display(Markdown(f"## {text}"))
h3 = lambda text: display(Markdown(f"### {text}"))

site_base = "https://pythonically.com"
slicer = "-" * 80

dates = []
counter = -1
date_next = False
with open("./index.md", "r") as fh:
    for line in fh:
        line = line.rstrip()
        if date_next:
            adate = line[3:]
            date_next = False
            adatetime = dateutil.parser.parse(adate).date()
            date_next = False
        if line == slicer:
            date_next = True
            counter = counter + 1

h1(f"There Are {counter} Posts:")

table = []
at_top = True
with open("./index.md", "r") as fh:
    for i, line in enumerate(fh):
        line = line.rstrip()
        if line == slicer:
            if at_top:
                at_top = False
                table = []
            adatetime = dates[counter - 1]
            filename = f"./_posts/{adatetime}-post-{counter}.md"
            h3(f"FILE: {filename}")
            with open(filename, "w") as fw:
                title = f"Post {counter}"
                if table[0] == slicer:
                    table = table[1:]
                maybe = table[1]
                has_title = False
                if table and maybe and maybe[0] == "#":
                    title = maybe[maybe.find(" ") + 1 :]
                    title = slugify(title)
                    has_title = True
                top = []
                top.append("layout: post\n")
                top.append(f'title: "{title}"\n')
                top.append("categories: blog\n")
                slug = title.lower().replace(" ", "-")
                top.append(f"slug: {slug}\n")
                top_chop = 2
                if has_title:
                    top_chop = 3
                table = [f"{x}\n" for x in table[top_chop:]]
                table = top + table
                # display(Markdown(''.join(table)))
            counter = counter - 1
            table = []