sábado, 14 de novembro de 2009

Problema 6.2

O problema 6.2 é muito simples.


def primeira_linha (nome_fich):
"""
le a primeira linha do ficheiro conforme e guardado
"""
conteudo = open(nome_fich,'r')
cont = conteudo.readline()
conteudo.close()
return cont

Abrimos o ficheiro para leitura, lemos uma linha (forçosamente a primeira) e guardamos o resultado, fechamos o ficheiro e, finalmente, devolvemos o resultado guardado.

Durante uma das aulas práticas alguém perguntou: e se fosse a terceira linha, ou outra qualquer? Foi uma questão pertinente, mas também neste caso a solução é trivial.


def le_linha_n(nome_fich,n):
"""
lê a n-ésima linha do ficheiro caso exista e mostra-a.
Assume n > 0.
"""
f_in = open(nome_fich, 'r')
for i in range(n-1):
f_in.readline()
linha = f_in.readline()
f_in.close()
return linha

Entre as habituais instruções de abertura e fecho do ficheiro, temos agora um ciclo para ler sem guardar as (n-1) primeiras linhas. Saídos do ciclo, lemos a linha seguinte (a n-ésima linha) e guardamos. No final, devolvemos o resultado. Esta forma de fazer está relacionada com o facto de um ficheiro ser um objecto de acesso sequencial e não de acesso directo, como é o caso das listas, por exemplo. Claro que podemos navegar pelo ficheiro, reposicionando a janela de acesso com a instrução seek(). Isso não invalida no entanto o que dissemos. A menos que soubéssemos a posição do primeiro caracter da linha n! Experimente a solução apresentada e veja como ela reage a linhas inexistentes.

Sem comentários:

Enviar um comentário