Ваше запитання неоднозначне; перші два речення, взяті разом, означають, що ви вважаєте, що пробіл та "період" - це символи, що не належать до 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()