Tu pregunta es ambigua; las dos primeras oraciones juntas implican que cree que el espacio y el "punto" son caracteres no ASCII. Esto es incorrecto. Todos los caracteres tales que ord (char) <= 127 son caracteres ASCII. Por ejemplo, ¡su función excluye estos caracteres! "# $% & \ '() * +, -. / Pero incluye varios otros, por ejemplo, [] {}.
Por favor, retroceda, piense un poco y edite su pregunta para decirnos qué está tratando de hacer, sin mencionar la palabra ASCII, y por qué cree que los caracteres tales como ord (char)> = 128 son ignorables. Además: ¿qué versión de Python? ¿Cuál es la codificación de sus datos de entrada?
Tenga en cuenta que su código lee todo el archivo de entrada como una sola cadena, y su comentario ("gran solución") a otra respuesta implica que no le importan las nuevas líneas en sus datos. Si su archivo contiene dos líneas como esta:
this is line 1
this is line 2
el resultado sería 'this is line 1this is line 2'
... ¿es eso lo que realmente quieres?
Una mejor solución incluiría:
- un nombre mejor para la función de filtro que
onlyascii
Reconocimiento de que una función de filtro simplemente necesita devolver un valor veraz si se quiere retener el argumento:
def filter_func(char):
return char == '\n' or 32 <= ord(char) <= 126
# and later:
filtered_data = filter(filter_func, data).lower()