
Putting a UI on My Access-to-CSV Converter
Once I got the command-line version working exactly how I wanted, I noticed I was doing the same thing over and over: pick an Access file, choose an output folder, hit run, then open Finder to dig through the CSVs. It worked great, but it felt a little clunky—especially if I wanted to share it with someone who isn’t glued to the terminal like I am.
So I decided to throw a simple UI on top of it.
My First Attempt (and Why I Bailed)
My initial thought was to whip up a tiny desktop app with Tkinter. It’s built into Python, super lightweight, perfect for this kind of thing… except on my Mac, my current Python install didn’t have Tk support enabled. I got the classic _tkinter import error. Sure, I could have reinstalled Python with Tcl/Tk or messed around with Homebrew, but the last thing I wanted was to tell anyone “first, rebuild your Python installation.” Nope. Hard pass.
I pivoted to something web-based instead.
The Little Web App I Ended Up With
I went with Flask because it’s basically zero ceremony—I can have a local server running in seconds, everything stays in pure Python, and I can use Jinja templates without pulling in a huge framework. For styling, I just grabbed Bootstrap so it looks decent without me having to think too hard about CSS.
The code lives in a few small files:
- The server:
access_to_csv/webapp.py - Templates:
index.html– the main formoutputs.html– list of generated CSVsview_csv.html– a simple table viewer
The workflow is dead simple: open the page, pick the Access database file, pick an output folder, and click “Run.” When it’s done, you’re redirected to a page that lists all the CSVs, with buttons to view or download them. Click “View” and you get a paginated table with a search box—good enough to poke around without opening Excel.
Making It Feel Native on macOS
Manually typing long file paths got old fast, so I added a couple of endpoints that pop up the native macOS file/folder picker using AppleScript:
/pick-filefor the Access database/pick-folderfor the output directory
The form includes “Browse…” buttons that, via JavaScript, hit those endpoints and auto-fill the fields. If you’re running it on Windows or Linux, the buttons just hide themselves, and you can paste paths the old-fashioned way—no big deal.
How I Actually Run It
I keep everything local and lightweight:
bash
source .venv/bin/activate
python -m access_to_csv.webapp
# then open http://127.0.0.1:5000 in my browser
If port 5000 is busy (thanks, something-else-on-my-mac), I just override it:
bash
ACCESS2CSV_PORT=5001 python -m access_to_csv.webapp
Browsing the CSVs Without Loading Everything
I definitely didn’t want to slurp a million-row CSV into memory just to look at the first few rows. So the viewer streams the file, shows one page at a time, and includes:
- A quick search that scans across all columns in the current page
- Adjustable page size
- Prev/next buttons
- A direct download link
It’s more than enough for spot-checking data or showing someone a sample.
What I Took Away From This
The nicest part is having both options. When I’m batch-processing a bunch of files or scripting something, I’ll just use the CLI. When I’m exploring a new database or handing it off to a teammate, I fire up the web UI and click around. All the heavy lifting lives in one shared export_database() function, so both interfaces stay in sync without any duplication.
In the end, I can now go from a random .accdb file to a folder full of browsable CSVs in under a minute, and I don’t have to walk anyone through complicated setup steps. Just install a couple Python packages, run the script, open a browser tab—done.
It feels like the right balance of simple and useful, and honestly, I’ve been using the web version way more than I expected.


