Sua pergunta é ambígua; as duas primeiras sentenças juntas implicam que você acredita que espaço e "ponto" são caracteres não ASCII. Isso está incorreto. Todos os caracteres como ord (char) <= 127 são caracteres ASCII. Por exemplo, sua função exclui esses caracteres! "# $% & \ '() * +, -. / Mas inclui vários outros, por exemplo [] {}.
Por favor, dê um passo para trás, pense um pouco e edite sua pergunta para nos dizer o que você está tentando fazer, sem mencionar a palavra ASCII, e por que você acha que caracteres como ord (char)> = 128 são ignoráveis. Além disso: qual versão do Python? Qual é a codificação de seus dados de entrada?
Observe que seu código lê todo o arquivo de entrada como uma única string, e seu comentário ("ótima solução") para outra resposta implica que você não se preocupa com novas linhas em seus dados. Se o seu arquivo contém duas linhas como esta:
this is line 1
this is line 2
o resultado seria 'this is line 1this is line 2'
... é isso que você realmente quer?
Uma solução maior incluiria:
- um nome melhor para a função de filtro do que
onlyascii
reconhecimento de que uma função de filtro precisa apenas retornar um valor verdadeiro se o argumento for retido:
def filter_func(char):
return char == '\n' or 32 <= ord(char) <= 126
# and later:
filtered_data = filter(filter_func, data).lower()