Trabalhar com ficheiros em Python permite a leitura, escrita e manipulação de dados de forma eficiente e prática. Iteradores, por sua vez, ajudam-nos a percorrer elementos numa coleção, tornando a manipulação de dados ainda mais poderosa. Vamos explorar ambos os conceitos com exemplos práticos.
Trabalhar com Ficheiros
Leitura de Ficheiros
Para ler ficheiros em Python, normalmente usamos a função open()
. Esta função abre o ficheiro e retorna um objeto de ficheiro que podemos usar para ler o conteúdo.
# Abrir um ficheiro em modo de leitura
with open('exemplo.txt', 'r') as ficheiro:
conteudo = ficheiro.read()
print(conteudo)
Neste exemplo, usamos a instrução with
para assegurar que o ficheiro é fechado corretamente após a leitura. A função read()
lê todo o conteúdo do ficheiro de uma só vez.
Escrita em Ficheiros
A escrita em ficheiros também é fácil de realizar em Python. Pode usar o modo w
para escrever num ficheiro, ou a
para anexar conteúdo a um ficheiro existente.
# Abrir um ficheiro em modo de escrita
with open('exemplo.txt', 'w') as ficheiro:
ficheiro.write('Esta é uma linha de exemplo.\n')
# Agora a abrir em modo de anexar
with open('exemplo.txt', 'a') as ficheiro:
ficheiro.write('Esta linha será adicionada ao final do ficheiro.\n')
Leitura Linha-a-Linha
Ler um ficheiro linha-a-linha pode ser mais eficiente se estivermos a trabalhar com ficheiros grandes. O método readlines()
lê o ficheiro e retorna uma lista de linhas.
with open('exemplo.txt', 'r') as ficheiro:
linhas = ficheiro.readlines()
for linha in linhas:
print(linha.strip()) # strip() remove espaços em branco no início e no fim
Iteradores e Iteráveis
Compreender Iteradores
Em Python, um iterador é um objeto que implementa os métodos __iter__()
e __next__()
. Qualquer objeto que siga estas regras pode ser percorrido com um ciclo for
.
lista = [1, 2, 3, 4, 5]
iterador = iter(lista)
print(next(iterador)) # Saída: 1
print(next(iterador)) # Saída: 2
Utilizando Ciclo For
O ciclo for
interno de Python utiliza iteradores de forma implícita, tornando o código mais limpo e conciso.
for elemento in lista:
print(elemento)
Criar Funções Geradoras
As funções geradoras usam a palavra-chave yield
para retornar valores um a um, em vez de retornar tudo de uma só vez.
def minha_geradora():
yield 1
yield 2
yield 3
gerador = minha_geradora()
print(next(gerador)) # Saída: 1
print(next(gerador)) # Saída: 2
Iteradores e Ficheiros
Quando trabalhamos com ficheiros, podemos usar iteradores para ler o ficheiro linha-a-linha de maneira mais eficiente.
with open('exemplo.txt', 'r') as ficheiro:
for linha in ficheiro:
print(linha.strip())
Resumo
Neste capítulo, explorámos como trabalhar com ficheiros em Python, incluindo como ler e escrever ficheiros e como ler ficheiros linha-a-linha. Também aprendemos sobre iteradores, iteráveis e funções geradoras, e como estes conceitos se aplicam na manipulação de ficheiros de maneira eficiente.
Quiz
-
Qual a função usada para abrir um ficheiro em Python?
-
a) open()
-
b) file()
-
c) read()
-
d) write()
-
-
Qual é o propósito da instrução
with
ao trabalhar com ficheiros?-
a) Para acelerar a leitura e escrita
-
b) Para assegurar que o ficheiro é fechado automaticamente
-
c) Para abrir múltiplos ficheiros ao mesmo tempo
-
d) Para permitir um bloqueio de leitura/escrita
-
-
O que faz a função
readlines()
num objeto de ficheiro?-
a) Lê uma linha de cada vez
-
b) Retorna uma lista com todas as linhas do ficheiro
-
c) Fecha o ficheiro após a leitura
-
d) Escreve uma linha no ficheiro
-
-
O que é um iterador em Python?
-
a) Uma lista de elementos
-
b) Uma função para ler ficheiros
-
c) Um objeto que implementa os métodos __iter__() e __next__()
-
d) Um container para armazenar dados
-
-
Qual a principal diferença entre
yield
ereturn
numa função?-
a)
yieldretorna múltiplos valores
-
b)
yieldretorna um valor de cada vez
-
c)
returnretorna múltiplos valores
-
d) Ambas as opções a e b
-
Respostas:
- a) open()
- b) Para assegurar que o ficheiro é fechado automaticamente
- b) Retorna uma lista com todas as linhas do ficheiro
- c) Um objeto que implementa os métodos iter() e next()
- d) Ambas as opções a e b