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 forline inLines: 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 whileTrue: count +=1 line =file1.readline() ifnotline: 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") forline infile1: 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() forline inLines: count +=1 print("Line{}: {}".format(count, line.strip())) count =0 print("\nUsing readline()") with open("myfile.txt") as fp: whileTrue: count +=1 line =fp.readline() ifnotline: break print("Line{}: {}".format(count, line.strip())) count =0 print("\nUsing for loop") with open("myfile.txt") as fp: forline infp: count +=1 print("Line{}: {}".format(count, line.strip())) Using readlines()Line1: GeeksLine2: forLine3: GeeksUsing readline()Line1: GeeksLine2: forLine3: GeeksUsing for loopLine1: GeeksLine2: forLine3: Geeks