Вы можете использовать регулярное выражение для соответствия интересующим вас знаками пунктуации и окружать их пробелами, а затем использовать второй шаг, чтобы свернуть несколько пробелов в любом месте документа:
s = 'bla. bla? bla.bla! bla...'
import re
s = re.sub('([.,!?()])', r' \1 ', s)
s = re.sub('\s{2,}', ' ', s)
print s
Результат:
bla . bla ? bla . bla ! bla . . .