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())