Eric Harris Back to portfolio

Technical Learning Lab · Foundational fluency

Python CLI / Log Analyzer

A self-directed first Python build: a command-line tool for reading, parsing, and making sense of log files - built to earn real command-line fluency by designing the program, hitting errors, and debugging through them.

Python CLI Log parsing File I/O Debugging

Overview

Where the ramp started

This lab was the foundational step in a deliberate ramp into hands-on engineering. Rather than passively working through exercises, I set out to build a small but complete command-line program end to end: take raw log files as input, parse them line by line, apply filtering and branching logic, and return a readable summary in the terminal.

The goal was fluency - getting comfortable enough with Python’s core building blocks that the language stops being in the way and starts being a tool for thinking. It is intentionally modest in scope and honest about that: a first build, done properly, that established the habits the later projects rely on.

What the build exercised

Focus areas

Command-line interface

Structuring input, arguments, and output so the tool is actually usable from a terminal - not just a script that runs once.

Reading & parsing files

Opening log files and processing them line by line, pulling structure out of unstructured text.

Control flow & branching

Filtering, matching, and routing lines based on their content - the logic that turns raw lines into answers.

File I/O & edge cases

Handling real files, including the messy and malformed lines that never show up in a tidy tutorial.

Debugging discipline

Reading tracebacks, isolating failures, and fixing the root cause instead of pasting over the symptom.

Summarizing output

Counting, grouping, and presenting results back to the user in a form that’s quick to read and act on.

What it demonstrates

Skills built

Python CLI Design File I/O Control Flow Parsing Error Handling Debugging Problem Solving

How it was built

Phase-gated, not tutorial-following

I built this in phases, treating each capability as a gate: get input working, then parsing, then filtering, then output - proving each layer before moving to the next. When something broke, I stayed with the error until I understood why, rather than reaching for a copy-paste fix. That loop - build, inspect, break, debug, iterate - is the same discipline that now drives the larger projects in the portfolio, from StoryTime to RoundTable.

See how it connects

This was step one. The same execution habits carry through the featured projects and the rest of the portfolio.