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)