Во-первых, использование str.replace
в цикле неэффективно.Поскольку строки являются неизменяемыми, вы должны создавать нужную строку на каждой из ваших итераций.Вы можете использовать str.translate
для удаления нежелательных символов за один проход.
Что касается удаления тире, только если это не граничный символ, это именно то, что str.strip
делает.
Также кажется, что символы, которые вы хотите удалить, соответствуют string.punctuation
, с особым регистром для '-'
.
from string import punctuation
def remove_special_character(s):
transltation = str.maketrans('', '', punctuation.replace('-', ''))
return ' '.join([w.strip('-') for w in s.split()]).translate(transltation)
polluted_string = '-This $string contain%s ill-desired characters!'
clean_string = remove_special_character(polluted_string)
print(clean_string)
# prints: 'This string contains ill-desired characters'
Если вы хотите применить это к нескольким строкам, вы можете сделать это с помощьюсписок-понимание.
lines = [remove_special_character(line) for line in lines]
Наконец, чтобы прочитать файл, вы должны использовать оператор with
.
with open(file, "r") as f
lines = [remove_special_character(line) for line in f]