File Input/Output

File Input/Output

File I/O que significa "input/output de arquivos" em inglês 🇺🇸, é uma funcionalidade essencial em Python para manipular dados armazenados💾 em arquivos. Em Python, você pode realizar operações de leitura (input) e escrita (output) em arquivos de maneira simples e eficiente.

File I/O serve para salvar os dados que gerou no seu programa. De outra forma, eles são apagados🗑️ uma vez que fecha o arquivo.

Suponha que você deseja verificar os alunos🎓 que foram numa atividade qualquer, e deseja salvar os nomes dos alunos num arquivo 📁.

nomes = [] #uma lista vazia

# 10 alunos
for _ in range(10):
    nome = input("Nome: ").strip().title()
    nomes.append(nome)   #adiciona cada nome à lista 'nomes'

Ordenando e colocando dentro de funções👇:

nomes = [] #uma lista vazia


def main():
    alunos(3)
    ordenar(nomes)


def alunos(quantidade):
    for _ in range(quantidade):
        nome = input("Nome: ").strip().title()
        nomes.append(nome)   #adiciona cada nome à lista 'nomes'

def ordenar(registro):
    for nome in sorted(registro):
        print(nome)


if __name__ == "__main__":
    main()

Open()

Basicamente o 👉 open() serve para abrir🔓 um arquivo, especificando o caminho do arquivo e o modo de operação. Após manipular o arquivo, é importante fechá-lo 🔒 usando o método close() . Os modos de operação são os seguintes:

  • "r" -> ler

  • "a" -> append ou adicionar

  • "w" -> escrever

  • "b" -> modo binário

O código a seguir irá criar um arquivo .txt onde será salvo 💾 essa informação.

nome = input("Nome: ")
arquivo = open("meuarquivo.txt", "a")  #'a' para adicionar
arquivo.write(f"{nome}\n")  #\n pula para seguinte linha (enter)
arquivo.close()

Atualizando o código 👇:

nomes = [] #uma lista vazia


def main():
    alunos(3)
    ordenar(nomes)


def alunos(quantidade):
    for _ in range(quantidade):
        nome = input("Nome: ")
        arquivo = open("meuarquivo.txt", "a")  #'a' para adicionar
        arquivo.write(f"{nome}\n")
        arquivo.close()

def ordenar(registro):
    for nome in sorted(registro):
        print(nome)


if __name__ == "__main__":
    main()

With ()

O principal objetivo do with () é garantir que determinadas operações de inicialização e finalização sejam realizadas de maneira limpa e eficiente. Se por acaso usou o open() e esqueceu de fechar com o close(), seu arquivo irá permanecer aberto, o uso do "with()" é uma sintaxe da seguinte forma 👇:

with open("meuarquivo.txt", "a") as file:
    file.write(f"{nome}\n")  #grava  a informacao no meuarquivo.py

Atualizando o código 👇:

nomes = [] #uma lista vazia


def main():
    alunos(3)
    ordenar(nomes)


def alunos(quantidade):
    for _ in range(quantidade):
        nome = input("Nome: ")
        with open("meuarquivo.txt", "a") as file:
            file.write(f"{nome}\n")  #grava  a informacao no meuarquivo.py           


def ordenar(registro):
    for nome in sorted(registro):
        print(nome)


if __name__ == "__main__":
    main()

Ao invés de gravar uma informação, eu quero ler 📖 a informação de um arquivo, para isso uso o parâmetro .readlines() da seguinte forma:

with open("meuarquivo.txt", "r") as file:  #'r' read (ler)
    linhas = file.readlines()  #linhas é lista []

for linha in linhas:
    print("Aluno:", line.rstrip())  #rstrip() limpa os espaco à direita

Mas esse código pode ainda ser otimizado, trazendo o for para dentro do with, da seguinte forma 👇:

with open("meuarquivo.txt") as file:
    for linha in file:
        print("Aluno", line.rstrip())

Existem infinitas possibilidades 🤷‍♂️ de tratamento de dados, por exemplo ordenar os nomes pelo alfabeto decrescente ⬆️ (baixo-cima) utilizando a função 👉 sorted():

with open("meuarquivo.txt") as file:
    for line in sorted(file, reverse=True):
        print("Aluno", line.rstrip())