Snippets

Common Python code, patterns, variables, and utilities

Main entry point

Only run code when file is executed directly.

def main():
    print("Hello")

if __name__ == "__main__":
    main()

f-strings

name = "world"
print(f"Hello, {name}!")  # Hello, world

Enumerate / Zip

for i, item in enumerate(["a", "b", "c"], start=1):
    print(i, item)

names = ["a", "b"]
scores = [10, 20]
for n, s in zip(names, scores):
    print(n, s)

Comprehensions

squares = [x*x for x in range(10)]
unique = {x % 3 for x in range(10)}
mapping = {x: x*x for x in range(5)}

Pathlib (paths/files)

from pathlib import Path

p = Path("data") / "file.txt"
text = p.read_text(encoding="utf-8")
p.write_text("hello", encoding="utf-8")

for f in Path("data").glob("*.json"):
    print(f.name)

Read/Write JSON

import json, pathlib

path = pathlib.Path("config.json")
data = {"name": "app", "debug": True}

# write (pretty)
path.write_text(json.dumps(data, indent=2), encoding="utf-8")

# read
cfg = json.loads(path.read_text(encoding="utf-8"))

YAML (pyyaml)

# pip install pyyaml
import yaml, pathlib

cfg = yaml.safe_load(pathlib.Path("config.yaml").read_text(encoding="utf-8"))
yaml.safe_dump(cfg, open("out.yaml", "w", encoding="utf-8"), sort_keys=False)

TOML (read-only builtin 3.11+)

# Python 3.11+
import tomllib
with open("pyproject.toml", "rb") as f:
    cfg = tomllib.load(f)

argparse (CLI args)

import argparse

p = argparse.ArgumentParser()
p.add_argument("--input", required=True)
p.add_argument("--count", type=int, default=1)
args = p.parse_args()
print(args.input, args.count)

Environment variables

import os
token = os.getenv("API_TOKEN", "")
if not token:
    print("API_TOKEN not set")

Subprocess

import subprocess

# capture output
out = subprocess.run(
    ["python", "--version"], check=True, text=True, capture_output=True
)
print(out.stdout.strip())

Logging quick setup

import logging

logging.basicConfig(
    level=logging.INFO,
    format="%(levelname)s %(asctime)s %(name)s - %(message)s",
)
log = logging.getLogger("app")
log.info("started")

Datetime / timezone

from datetime import datetime, timezone, timedelta

now_utc = datetime.now(timezone.utc)
local = now_utc.astimezone()
iso = now_utc.isoformat()  # 2025-08-16T12:34:56+00:00

Dataclass

from dataclasses import dataclass

@dataclass
class User:
    id: int
    name: str
    active: bool = True

u = User(1, "Ada")

Type hints

from typing import List, Dict, Optional, Tuple

def load(name: str) -> Optional[Dict[str, str]]:
    return {"k": "v"} if name else None

Requests (HTTP)

# pip install requests
import requests

r = requests.get("https://httpbin.org/get", timeout=10)
r.raise_for_status()
print(r.json())

Try / except / raise

def parse_i(s: str) -> int:
    try:
        return int(s)
    except ValueError as e:
        raise ValueError(f"Invalid int: {s}") from e

Timing a block

import time

t0 = time.perf_counter()
# ... do work ...
dt = time.perf_counter() - t0
print(f"took {dt:.3f}s")

Context manager

from contextlib import contextmanager

@contextmanager
def timer(name="work"):
    import time
    t0 = time.perf_counter()
    try:
        yield
    finally:
        print(name, "took", time.perf_counter() - t0)

Progress bar (tqdm)

# pip install tqdm
from tqdm import tqdm
for _ in tqdm(range(1000)):
    pass

__name__ and __file__

import os
print(__name__)       # "__main__" when executed directly
print(__file__)       # current file path
print(os.path.dirname(__file__))

sys.path (import search path)

import sys, pprint
pprint.pp(sys.path)