#!/usr/bin/python
import random
import string
digits = "".join( [random.choice(string.digits) for i in xrange(8)] )
chars = "".join( [random.choice(string.letters) for i in xrange(15)] )
print digits + chars
EDIT: идея использования random.choice понравилась лучше, чем randint (), поэтому я обновил код, чтобы отразить это.
Примечание. Предполагается, что необходимы строчные и прописные буквы. Если только строчные буквы, измените понимание второго списка следующим образом:
chars = "".join( [random.choice(string.letters[:26]) for i in xrange(15)] )
Очевидно, что только в верхнем регистре вы можете просто перевернуть его, чтобы получился срез [26:], а не наоборот.