Проблема, которую вы получаете, заключается в том, что некоторые строки пусты.
Тогда ваша замена неверна:
- first, потому что она назначит первый «символ» строкино вы не можете изменить строку, потому что она неизменна
- секунда, потому что значением замены является вся строка минус несколько штрихов
- треть, потому что
line
теряется на следующей итерации.Кстати, оригинальный список строк.
Если вы хотите удалить первый символ строки, нет необходимости в replace
, просто нарежьте строку (и не рискуйтеудалите другие подобные символы).
Рабочим решением было бы проверить с помощью startswith
и перестроить новый список строк.Затем присоединитесь обратно
text = """hello
-yes--
who are you"""
new_text = []
for line in text.splitlines():
if line.startswith("-"):
line = line[1:]
new_text.append(line)
print("\n".join(new_text))
результат:
hello
yes--
who are you
с большим опытом, вы можете упаковать этот код в понимание списка:
new_text = "\n".join([line[1:] if line.startswith("-") else line for line in text.splitlines()])
наконец, регулярное выражениеМодуль также является хорошей альтернативой:
import re
print(re.sub("^-","",text,flags=re.MULTILINE))
это удаляет дефис во всех строках, начинающихся с дефиса.Многострочный флаг указывает механизму регулярных выражений, что ^
следует рассматривать как начало строки, а не как начало буфера.