Ваш вопрос неоднозначен; первые два предложения, взятые вместе, подразумевают, что вы считаете, что пробел и «точка» не являются символами ASCII. Это неверно Все символы, такие как ord (char) <= 127, являются символами ASCII. Например, ваша функция исключает эти символы! "# $% & \ '() * +, -. /, Но включает несколько других, например [] {}. </p>
Пожалуйста, сделайте шаг назад, подумайте немного и отредактируйте свой вопрос, чтобы сообщить нам, что вы пытаетесь сделать, не упоминая слово 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()