Ihre Frage ist nicht eindeutig; Die ersten beiden Sätze zusammen bedeuten, dass Sie glauben, dass Leerzeichen und "Punkt" keine ASCII-Zeichen sind. Das ist falsch. Alle Zeichen, so dass ord (char) <= 127 ist, sind ASCII-Zeichen. Zum Beispiel schließt Ihre Funktion diese Zeichen aus! "# $% & \ '() * +, -. / Enthält jedoch mehrere andere, z. B. [] {}.
Bitte treten Sie zurück, überlegen Sie ein wenig und bearbeiten Sie Ihre Frage, um uns mitzuteilen, was Sie versuchen, ohne das Wort ASCII zu erwähnen, und warum Sie der Meinung sind, dass Zeichen wie ord (char)> = 128 ignorierbar sind. Auch: welche Version von Python? Wie ist die Kodierung Ihrer Eingabedaten?
Bitte beachten Sie, dass Ihr Code die gesamte Eingabedatei als einzelne Zeichenfolge liest und Ihr Kommentar ("großartige Lösung") zu einer anderen Antwort impliziert, dass Sie sich nicht für Zeilenumbrüche in Ihren Daten interessieren. Wenn Ihre Datei zwei Zeilen wie diese enthält:
this is line 1
this is line 2
das Ergebnis wäre 'this is line 1this is line 2'
... ist es das, was Sie wirklich wollen?
Eine bessere Lösung wäre:
- ein besserer Name für die Filterfunktion als
onlyascii
Erkennen, dass eine Filterfunktion lediglich einen Wahrheitswert zurückgeben muss, wenn das Argument beibehalten werden soll:
def filter_func(char):
return char == '\n' or 32 <= ord(char) <= 126
# and later:
filtered_data = filter(filter_func, data).lower()