la forma mas facil que se me ocurre es con regex,
un ejemplo
import re
text = "Lo que intento es leer un fichero y hacer una lista con todas las palabras del fichero de la forma más eficiente posible y quería saber si existe algún tipo de algoritmo que lo realice de la forma más eficiente posible. He probado con .split() pero no valdría ya que el fichero contiene caracteres los cuales no reconocería (p.e "," "-" "(" ...). Se hacerlo con el método de ir reconociendo cada caracter y cuando el que reconozca no sea una letra unir todos los caracteres y formar palabra y seguir haciendo esto en todo el fichero pero no se si hay alguna otra forma de hacerlo."
parts = re.findall(r"[a-záéíóúÁÉÍÓÚ]+",text,re.I)
# parts es un list que contiene lo siguiente
# ['Lo', 'que', 'intento', 'es', 'leer', 'un', 'fichero', 'y', 'hacer', 'una', 'lista', 'con', 'todas', 'las',
# 'palabras', 'del', 'fichero', 'de', 'la', 'forma', 'más', 'eficiente', 'posible', 'y', 'quería', 'saber',
# 'si', 'existe', 'algún', 'tipo', 'de', 'algoritmo', 'que', 'lo', 'realice', 'de', 'la', 'forma', 'más',
# 'eficiente', 'posible', 'He', 'probado', 'con', 'split', 'pero', 'no', 'valdría', 'ya', 'que', 'el',
# 'fichero', 'contiene', 'caracteres', 'los', 'cuales', 'no', 'reconocería', 'p', 'e', 'Se', 'hacerlo',
# 'con', 'el', 'método', 'de', 'ir', 'reconociendo', 'cada', 'caracter', 'y', 'cuando', 'el', 'que',
# 'reconozca', 'no', 'sea', 'una', 'letra', 'unir', 'todos', 'los', 'caracteres', 'y', 'formar', 'palabra',
# 'y', 'seguir', 'haciendo', 'esto', 'en', 'todo', 'el', 'fichero', 'pero', 'no', 'se', 'si', 'hay', 'alguna',
# 'otra', 'forma', 'de', 'hacerlo']
como regex nativamente no digiere las letras con acento las tuve que agregar (mayusculas y minusculas ya que no conoce ese concepto en esas letras), asi que cualquier otra (como ñ letras con dieresis, etc) deben ser agregadas a necesidad