Arquivos de Texto em Python
Escrevendo em Arquivos de Texto
Para abrir um arquivo de texto para escrita, utilizamos os modos:
- w: abre para escrita e sobrescreve o conteúdo existente.
- a: abre para escrita e adiciona novos dados ao final do arquivo.
- r+ou- w+: abre para leitura e escrita.- r+resulta em um erro- FileNotFoundErrorse o arquivo não existir, enquanto- w+cria o arquivo caso ele não exista ou o sobrescreve se já existir.
Vamos ver um exemplo de como escrever em um arquivo de texto:
with open("hello.txt", "w") as file:
    file.write("hello world")
print("Arquivo criado com sucesso!")Ao executar este código, o arquivo hello.txt será criado (ou sobrescrito) no diretório atual e poderá ser aberto em qualquer editor de texto para verificação.
Para adicionar uma nova linha ao conteúdo do arquivo:
with open("hello.txt", "a") as file:
    file.write("\nhello work")
print("Arquivo modificado")O código acima adiciona uma nova linha ao final do conteúdo existente. O caractere \n é utilizado para iniciar uma nova linha no arquivo. O conteúdo do arquivo hello.txt ficará assim:
hello world hello work
Escrevendo Múltiplas Linhas
Para escrever várias linhas de uma vez, utilizamos o método writelines(), que recebe uma lista de strings. Cada string da lista precisa terminar com \n para que seja escrita em uma nova linha.
lines = ["Hello Word\n", "Hello Work\n", "Hello World\n"]
with open("hello2.txt", "a") as file:
    file.writelines(lines)
print("Lista de linhas escrita com sucesso!")Também é possível usar o método print() para gravar dados em um arquivo, especificando o argumento file:
with open("hello.txt", "a") as myfile:
    print("\nhello www.programicio.com", file=myfile)Leitura de Arquivo
Para ler o conteúdo de um arquivo, abrimos o arquivo em modo de leitura r. Existem três métodos principais para extrair o conteúdo:
- readline(): lê uma linha do arquivo.
- read(): lê todo o conteúdo do arquivo em uma única string.
- readlines(): lê todas as linhas e retorna uma lista de strings.
Exemplo de leitura linha a linha:
with open("hello.txt", "r") as file:
    for line in file:
        print(line, end="")Nesse caso, readline() é chamado automaticamente ao iterar sobre o arquivo. O parâmetro end="" evita que print() adicione uma linha extra entre as linhas já terminadas com \n.
Para ler o arquivo inteiro de uma vez:
with open("hello.txt", "r") as file:
    content = file.read()
    print(content)Para ler tudo como uma lista de strings:
with open("hello.txt", "r") as file:
contents = file.readlines()
print(contents)Caso o arquivo tenha uma codificação específica, podemos defini-la com o argumento encoding:
with open("hello.txt", encoding="utf8") as file:
    text = file.read()Leitura e Escrita Simultâneas
Para abrir um arquivo para leitura e escrita ao mesmo tempo, usamos os modos r+ ou w+. Exemplo de escrita e leitura:
with open("hello.txt", "w+") as file:
    file.write("Hello world\nHello work\n")
    file.seek(0)
    content = file.read()
    print(content)O método seek() reposiciona o ponteiro para o início do arquivo após a gravação.
Movendo o Ponteiro
O método seek() permite reposicionar o ponteiro de leitura/escrita no arquivo. Para retornar ao início, usamos seek(0):
file.seek(0)Podemos também mover para uma posição específica no arquivo:
with open("hello.txt", "w+") as file:
    file.write("Hello world\n")
    file.seek(6)
    content = file.read()
    print(content)  # Saída: "world"Exemplo Prático: Gravação e Leitura Interativas
Abaixo, um exemplo de script que grava mensagens fornecidas pelo usuário e permite sua leitura:
FILENAME = "messages.txt"
def write():
    message = input("Digite uma mensagem: ")
    with open(FILENAME, "a") as file:
        file.write(message + "\n")
def read():
    with open(FILENAME, "r") as file:
        for message in file:
            print(message, end="")
    print()  # Linha em branco para separar o menu da saída
while True:
    selection = int(input("1. Gravar no arquivo\t2. Ler o arquivo\t3. Sair\nEscolha uma opção: "))
    match selection:
        case 1:
            write()
        case 2:
            read()
        case 3:
            break
        case _:
            print("Entrada inválida")
print("Programa encerrado")Exemplo de execução:
1. Gravar no arquivo 2. Ler o arquivo 3. Sair Escolha uma opção: 1 Digite uma mensagem: Olá, mundo! 1. Gravar no arquivo 2. Ler o arquivo 3. Sair Escolha uma opção: 2 Olá, mundo! 1. Gravar no arquivo 2. Ler o arquivo 3. Sair Escolha uma opção: 3 Programa encerrado
O script acima permite ao usuário gravar mensagens em um arquivo e lê-las posteriormente. O menu é exibido até que o usuário escolha a opção de sair.
Documentação oficial: