Imagino que queira algo parecido com isto:
def is_valid(column_list, column_index=3, invalid_data="Here!"):
return len(column_list) <= column_index or column_list[column_index] != invalid_data
fname_in = "blablah.txt"
fname_out = "blablah_updated.txt"
split_symbol = "|"
with open(fname_in, "r") as fin:
with open(fname_out, "w") as fout:
for line in fin.readlines():
if is_valid([column.strip() for column in line.split(split_symbol)]):
fout.write(line)
Talvez isso já solucione o problema, mas o objetivo era mais para dar uma ideia, minimamente do que procurar para ler (e.g. métodos strip e split das strings, uso do "open" e do método readlines, bloco with, etc.). Dependendo do que precisar, as strings ainda possuem outros métodos úteis como o "replace":
Para modificar "in place" no próprio arquivo de entrada, recomendo que "desaninhe" os blocos "with", fechando o arquivo em leitura para então abri-lo como escrita, reescrevendo o arquivo inteiro.