Vamos tentar resolver o problema de
eliminar uma linha de um ficheiro. O ficheiro vai ter que ser lido e temos que identificar a linha a eliminar. Faz sentido fazer então uma leitura por linhas. Vejamos uma solução simples.
01.
def
elimina_linha_1(ficheiro,n):
02.
03.
with open(ficheiro,
'r'
,encoding
=
'utf-8'
) as fich:
04.
05.
linhas
=
fich.readlines()
06.
fich.close()
07.
with open(ficheiro,
'w'
,encoding
=
'utf-8'
) as fich:
08.
09.
linhas.pop(n)
10.
11.
fich.writelines(linhas)
12.
fich.close()
Como fizemos??? Lemos e guardámos todas as linhas. Depois eliminámos a linha pretendida. Finalmente apagámos o ficheiro antigo com a abertura em modo
‘w’ e colocámos lá a nova informação. Claro que podíamos ter feito uma
leitura inicial linha a linha filtrando a linha pretendida. O resultado seria:
01.
def
elimina_linha_2(ficheiro,n):
02.
03.
with open(ficheiro,
'r'
,encoding
=
'utf-8'
) as fich:
04.
linhas
=
[]
05.
for
i,linha
in
enumerate(fich):
06.
if
i !
=
n:
07.
linhas.append(linha)
08.
fich.close()
09.
with open(ficheiro,
'w'
,encoding
=
'utf-8'
) as fich:
10.
fich.writelines(linhas)
11.
fich.close()
Admita que agora a especificação é ligeiramente diferente. Não se trata de eliminar mas de
substituir. O que fizemos anteriormente pode servir-nos de inspiração:
01.
def
substitui_linha_1(ficheiro,n, nova_linha):
02.
03.
with open(ficheiro,
'r'
,encoding
=
'utf-8'
) as fich:
04.
novas_linhas
=
[]
05.
for
i,linha
in
enumerate(fich):
06.
if
i
=
=
n:
07.
novas_linhas.append(nova_linha)
08.
else
:
09.
novas_linhas.append(linha)
10.
with open(ficheiro,
'w'
,encoding
=
'utf-8'
) as fich:
11.
fich.writelines(novas_linhas)
Nesta solução, vamos copiando as linhas a manter e colocando a nova no lugar pretendido. Nada de especial, certo? Às vezes mais vale tentar uma solução simples mas que resulta do que uma rebuscada que nos pode trazer alguns dissabores. Mas nada impede agora que tente as suas soluções para as duas questões apresentadas.
Sem comentários:
Enviar um comentário