@@ -0,0 +1,1105 @@
+#! /usr/bin/env python3%0A%0Aimport argparse%0Aimport string%0A%0Adef main(args):%0A    rows = string.ascii_uppercase%5B:8%5D%0A    cols = range(1, 13)%0A    if args.r:%0A        wells = %5B(r, c) for r in rows for c in cols%5D%0A    else:%0A        wells = %5B(r, c) for c in cols for r in rows%5D%0A    if args.p:%0A        fstr = %22%7B%7D%7B:02d%7D%22%0A    else:%0A        fstr =%22%7B%7D%7B%7D%22%0A    for w in wells%5B:args.n%5D:%0A        print(fstr.format(*w))%0A%0Adef check_range(n):%0A    x = int(n)%0A    if x %3C 1 or x %3E 96:%0A        raise argparse.ArgumentTypeError(%22%7B%7D must be an interger between 1%E2%80%9396%22.format(n))%0A    return x%0A%0Aif __name__ == %22__main__%22:%0A    p = argparse.ArgumentParser(%0A            description=%22Generate plate coordinates/well labels%22)%0A    p.add_argument(%22-r%22, action=%22store_true%22,%0A        default=False, help=%22Order wells by row (default is by columns)%22)%0A    p.add_argument(%22-p%22, action=%22store_true%22,%0A        default=False, help=%22Zero-pad numbers (default is don't)%22)%0A    p.add_argument(%22-n%22, type=check_range, action=%22store%22, default=96,%0A        help=%22Stop after printing these many wells (1-96; default: 96)%22)%0A    args = p.parse_args()%0A    main(args)%0A

Add simple script to generate plate labels