Ваш вопрос неоднозначный; первые два предложения, взятые вместе, означают, что вы считаете, что пробел и «точка» не являются символами ASCII. Это неверно. Все символы, такие как ord (char) <= 127, являются символами ASCII. Например, ваша функция исключает эти символы! "# $% & \ '() * +, -. /, Но включает несколько других, например [] {}.
Пожалуйста, сделайте шаг назад, немного подумайте и отредактируйте свой вопрос, чтобы сообщить нам, что вы пытаетесь сделать, не упоминая слово ASCII, и почему вы думаете, что такие символы, как ord (char)> = 128, игнорируются. Также: какая версия Python? Какая кодировка ваших входных данных?
Обратите внимание, что ваш код считывает весь входной файл как одну строку, а ваш комментарий («отличное решение») к другому ответу подразумевает, что вам наплевать на символы новой строки в ваших данных. Если ваш файл содержит две такие строки:
this is line 1
this is line 2
результат будет 'this is line 1this is line 2'
... это то, чего вы действительно хотите?
Лучшее решение будет включать:
- лучшее имя для функции фильтра, чем
onlyascii
признание того, что функция фильтра просто должна возвращать истинное значение, если аргумент должен быть сохранен:
def filter_func(char):
return char == '\n' or 32 <= ord(char) <= 126
# and later:
filtered_data = filter(filter_func, data).lower()