GeeksforGeeks
Prerequisites:
- Modos de acesso
- Abrir um ficheiro
- Fechar um ficheiro
Python fornece funções embutidas para criar, escrever e ler ficheiros. Há dois tipos de ficheiros que podem ser tratados em python, ficheiros de texto normal e ficheiros binários (escritos em linguagem binária, 0s, e 1s). Neste artigo, vamos estudar a leitura linha a linha de um ficheiro.
Leitura linha a linha
Usar linhas de leitura()
readlines() é usado para ler todas as linhas de uma só vez e depois devolvê-las como cada linha um elemento de cadeia numa lista. Esta função pode ser usada para pequenos ficheiros, pois lê todo o conteúdo do ficheiro na memória, e depois divide-o em linhas separadas. Podemos iterar sobre a lista e retirar o carácter da nova linha ‘\n’ usando a função strip().
Exemplo:
>br>
>br>>>/p>
L
=
file1
=
open
(
'myfile.txt'
,
'w'
)
file1.writelines(L)
file1.close()
file1
=
open
(
'myfile.txt'
,
'r'
)
Lines
=
file1.readlines()
count
=
0
for
line
in
Lines:
count
+
=
1
print
(
"Line{}: {}"
.
format
(count, line.strip()))
>br>>>/div>
Eliminar:
Line1: GeeksLine2: forLine3: Geeks
Utilizando a função readline()
readline() lê uma linha do ficheiro e devolve-a sob a forma da string. É necessário um parâmetro n, que especifica o número máximo de bytes que serão lidos. Contudo, não lê mais do que uma linha, mesmo que n exceda o comprimento da linha. Será eficiente ao ler um ficheiro grande porque em vez de ir buscar todos os dados de uma só vez, vai buscar linha a linha. readline() devolve a próxima linha do ficheiro que contém um novo carácter de linha no final. Além disso, se o fim do ficheiro for alcançado, devolverá uma cadeia de caracteres vazia.
Exemplo:
>/p>
L
=
file1
=
open
(
'myfile.txt'
,
'w'
)
file1.writelines((L))
file1.close()
file1
=
open
(
'myfile.txt'
,
'r'
)
count
=
0
while
True
:
count
+
=
1
line
=
file1.readline()
if
not
line:
break
print
(
"Line{}: {}"
.
format
(count, line.strip()))
file1.close()
br>>/div>
Eliminar:
Line1 GeeksLine2 forLine3 Geeks
Using for loop
Um objecto iterável é devolvido pela função open() enquanto se abre um ficheiro. Esta forma final de leitura num ficheiro linha a linha inclui a iteração sobre um objecto de ficheiro num laço para. Ao fazê-lo, estamos a tirar partido de uma função Python incorporada que nos permite iterar sobre o objecto de ficheiro implicitamente usando um laço para laço numa combinação com a utilização do objecto iterável. Esta abordagem requer menos linhas de código, o que é sempre a melhor prática digna de ser seguida.
Exemplo:
>/p>
L
=
file1
=
open
(
'myfile.txt'
,
'w'
)
file1.writelines(L)
file1.close()
file1
=
open
(
'myfile.txt'
,
'r'
)
count
=
0
print
(
"Using for loop"
)
for
line
in
file1:
count
+
=
1
print
(
"Line{}: {}"
.
format
(count, line.strip()))
file1.close()
Eliminar:
Using for loopLine1: GeeksLine2: forLine3: Geeks
Com declaração
Nas abordagens acima, sempre que o ficheiro é aberto é necessário fechá-lo explicitamente. Se alguém se esquecer de fechar o ficheiro, pode introduzir vários erros no código, ou seja, muitas alterações nos ficheiros não entram em vigor até que o ficheiro seja devidamente fechado. Para evitar isto, pode ser utilizada uma declaração. O With statement em Python é utilizado no tratamento de excepções para tornar o código mais limpo e muito mais legível. Simplifica a gestão de recursos comuns como os fluxos de ficheiros. Observe o seguinte exemplo de código sobre como a utilização de com declaração torna o código mais limpo. Não há necessidade de chamar file.close() quando se utiliza com a declaração. O com a declaração em si assegura a aquisição e libertação adequada de recursos.
Example:
>/p>
L
=
with
open
(
"myfile.txt"
,
"w"
) as fp:
fp.writelines(L)
count
=
0
print
(
"Using readlines()"
)
with
open
(
"myfile.txt"
) as fp:
Lines
=
fp.readlines()
for
line
in
Lines:
count
+
=
1
print
(
"Line{}: {}"
.
format
(count, line.strip()))
count
=
0
print
(
"\nUsing readline()"
)
with
open
(
"myfile.txt"
) as fp:
while
True
:
count
+
=
1
line
=
fp.readline()
if
not
line:
break
print
(
"Line{}: {}"
.
format
(count, line.strip()))
count
=
0
print
(
"\nUsing for loop"
)
with
open
(
"myfile.txt"
) as fp:
for
line
in
fp:
count
+
=
1
print
(
"Line{}: {}"
.
format
(count, line.strip()))
Using readlines()Line1: GeeksLine2: forLine3: GeeksUsing readline()Line1: GeeksLine2: forLine3: GeeksUsing for loopLine1: GeeksLine2: forLine3: Geeks