Votre question est ambiguë ; les deux premières phrases prises ensemble impliquent que vous pensez que l'espace et le "point" sont des caractères non ASCII. Ceci est incorrect. Tous les caractères tels que ord(char) <= 127 sont des caractères ASCII. Par exemple, votre fonction exclut les caractères !"#$%&\'()*+,-./ mais en inclut plusieurs autres, par exemple []{}.
Veuillez prendre du recul, réfléchir un peu et modifier votre question pour nous dire ce que vous essayez de faire, sans mentionner le mot ASCII, et pourquoi vous pensez que les caractères tels que ord(char) >= 128 sont ignorables. De plus, quelle version de Python ? Quel est l'encodage de vos données d'entrée ?
Veuillez noter que votre code lit l'ensemble du fichier d'entrée comme une seule chaîne de caractères et que votre commentaire ("excellente solution") à une autre réponse implique que vous ne vous souciez pas des nouvelles lignes dans vos données. Si votre fichier contient deux lignes comme ceci :
this is line 1
this is line 2
le résultat serait 'this is line 1this is line 2'
... est-ce que c'est ce que vous voulez vraiment ?
Une meilleure solution comprendrait :
- un meilleur nom pour la fonction de filtrage que
onlyascii
-
la reconnaissance du fait qu'une fonction de filtrage doit simplement retourner une valeur véridique si l'argument doit être conservé :
def filter_func(char):
return char == '\n' or 32 <= ord(char) <= 126
# and later:
filtered_data = filter(filter_func, data).lower()