Prática com Modos de Leitura/Escrita e Escolhendo o Modo Certo
O Python também fornece modos que permitem tanto a leitura quanto a escrita dentro do mesmo contexto open(). Estes oferecem mais flexibilidade, mas exigem um manuseio cuidadoso do ponteiro do arquivo.
- Leitura e Escrita (
'r+'): Abre um arquivo existente para leitura e escrita. O ponteiro começa no início. A escrita irá sobrescrever o conteúdo existente a partir da posição do ponteiro.
- Escrita e Leitura (
'w+'): Abre um arquivo para escrita e leitura. Ele trunca o arquivo se ele existir ou o cria se não existir. O ponteiro começa no início.
- Anexação e Leitura (
'a+'): Abre um arquivo para anexação (escrita no final) e leitura. Ele cria o arquivo se ele não existir. O ponteiro começa no final para escrita, mas você pode movê-lo (por exemplo, usando file.seek(0)) para ler do início.
Vamos demonstrar 'r+'. Usaremos o meu_arquivo_leitura.txt criado no Passo 1. Vamos abri-lo, ler o conteúdo, depois mover o ponteiro de volta para o início e sobrescrever o início do arquivo.
Crie um arquivo Python chamado rplus_exemplo.py em /home/labex/project. Adicione este código:
try:
## Open the file in read and write mode ('r+')
## The file must exist for this mode.
with open('/home/labex/project/my_reading_file.txt', 'r+') as file:
## Read the initial content
initial_content = file.read()
print("Initial file content:")
print(initial_content)
## Move the file pointer back to the beginning
print("\nMoving pointer to the beginning using file.seek(0).")
file.seek(0)
## Write new content at the beginning (overwriting existing content)
print("Writing new content...")
file.write("Prepended line 1.\n")
file.write("Prepended line 2.\n")
## If the new content is shorter than what was overwritten,
## the rest of the original content might remain unless truncated.
## We can use file.truncate() after writing to remove any trailing old data.
print("Truncating file to the current position to remove old trailing data.")
file.truncate()
print("\nContent written and file truncated.")
except FileNotFoundError:
print("Error: The file was not found. 'r+' requires the file to exist.")
except Exception as e:
print(f"An error occurred: {e}")
print("\nFinished with r+ mode example.")
Este script abre o arquivo em 'r+', lê, volta para o início (file.seek(0)), escreve novas linhas (sobrescrevendo) e, em seguida, usa file.truncate() para remover qualquer conteúdo original restante que possa existir além do texto recém-escrito.
Salve rplus_exemplo.py. Antes de executá-lo, vamos garantir que meu_arquivo_leitura.txt tenha seu conteúdo original:
echo "This is the first line." > /home/labex/project/my_reading_file.txt
echo "This is the second line." >> /home/labex/project/my_reading_file.txt
Agora, execute o script Python a partir do terminal:
python rplus_example.py
Você verá o conteúdo inicial impresso, seguido por mensagens sobre o processo:
Initial file content:
This is the first line.
This is the second line.
Moving pointer to the beginning using file.seek(0).
Writing new content...
Truncating file to the current position to remove old trailing data.
Content written and file truncated.
Finished with r+ mode example.
Verifique o conteúdo final do arquivo usando cat:
cat /home/labex/project/my_reading_file.txt
A saída deve mostrar apenas o conteúdo recém-escrito, graças à sobrescrita e truncamento:
Prepended line 1.
Prepended line 2.
Escolhendo o Modo de Acesso a Arquivos Apropriado
Selecionar o modo correto é vital. Aqui está um guia rápido:
- Use
'r' para acesso somente leitura a arquivos existentes.
- Use
'w' para criar um novo arquivo ou substituir completamente o conteúdo de um arquivo existente.
- Use
'a' para adicionar ao final de um arquivo sem perder dados existentes (bom para logs).
- Use
'r+' para ler e modificar um arquivo existente a partir do início.
- Use
'w+' para criar ou sobrescrever um arquivo e, em seguida, lê-lo/escrevê-lo.
- Use
'a+' para anexar a um arquivo e também poder lê-lo (requer busca).
Esta tabela resume os comportamentos-chave:
| Modo |
Leitura |
Escrita |
Criar se não existir |
Truncar se existir |
Posição do Ponteiro (Inicial) |
'r' |
Sim |
Não |
Não |
Não |
Início |
'w' |
Não |
Sim |
Sim |
Sim |
Início |
'a' |
Não |
Sim |
Sim |
Não |
Fim |
'r+' |
Sim |
Sim |
Não |
Não |
Início |
'w+' |
Sim |
Sim |
Sim |
Sim |
Início |
'a+' |
Sim |
Sim |
Sim |
Não |
Fim |
Ao considerar se você precisa ler, escrever, anexar, lidar com arquivos existentes ou criar novos, você pode escolher com confiança o modo mais adequado para sua tarefa.