Вам нужно изменить свое состояние - как сейчас он проверяет, равна ли вся строка 41640
. Каждый line
вместо этого равен всей строке данных, которые вы читаете, за которыми следует \n
. Фиксированная версия вашей программы выглядит следующим образом:
with open("00-old.dat","r") as input:
with open("00-new.dat","wb") as output:
for line in input:
if "41640" not in line:
output.write(line)
Чтобы удалить несколько строк, вы можете использовать all()
в сочетании с пониманием списка, как, например, описано в этом посте ,
if all(nb not in line for nb in del_list):
output.write(line)
где del_list
- список значений, которые вы хотите удалить,
del_list = ["41615", "41640", "42334"]
Кроме того, из-за приоритета оператора в Python ваше исходное состояние всегда будет оцениваться как True
. Это потому, что даже если 41640!=line
было ложным, \n
добавляется к нему и интерпретируется (после преобразования) как True
. В основном, !=
оценивается первым вместо конкатенации строк, за которыми следует !=
.