Как уже предложили, можно решать либо через регулярные выражения (re.sub хорошо подойдет), либо простым методом перебора посимвольно, тоже вариант. В обоих случаях нужно сначала определить символы, которые не нужно экранировать, создать из них список/строку (разрешенные символы, "белый список", whitelist). Потому что Вы пока и сами неправильно сформулировали условие. По нему получается, что и пробелы, и запятые тоже нужно экранировать, но ведь наверное это не так? Вот и нужно составить четкий список, что не экранируется. Эти данные и будут использоваться для сравнения.
Если не использовать regexp, можно например так:
Заводим некий флаг, указывающий на переход от разрешенных символов к запрещенным (= остальным).
Перебираем строку посимвольно.
Если категория символов сменилась (т.е. перешли от разрешенных к запрещенным и наоборот), то в зависимости от флага добавляем эти кавычки до или после символа, и обновляем флаг.
1. Вот прям вообще все не буквы? В том числе пробелы? В том числе точки и запятые? В том числе цифры?
2. А если несколько не-букв подряд? Оборачивать все или каждую?
В любом случае, регулярные выражения в помощь, они умеют делать замену по шаблону.
Задача разбивается на под-задачи. Найти Python функцию которая определяет что символ принадлежит к english или russian диапазону символов. Я думаю что это - стандартная задача которая тыщу раз решена.
И второе - это "обернуть" всё оставшееся в то что хочет автор. Я не сильно понимаю по какому алгоритму надо оборачивать. Похоже как всегда кодировка побита.
Регулярки в данной разработке - избыточны. Я думаю что нам хватит стандартного API unicode.