Article image
Guilherme Gomes
Guilherme Gomes11/01/2024 00:58
Compartilhe

Funções em Python: Abra-se a novas possibilidades com open()

  • #Python

open("new_article.dio", 'w', encoding = "utf-8")

Como diria Albert Einstein:

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original"

E é com o perdão dos trocadilhos que, neste artigo, veremos como utilizar de maneira simples a função built-in "open()".

O que a função open() faz?

Segundo a documentação oficial a função open() abre um arquivo e retorna um file-object que, por sua vez merece outro artigo para uma devida explicação. Todavia, para simplificarmos o entendimento, podemos, por hora, compreender um file-object como um objeto que nos fornece métodos para trabalharmos com o arquivo que abrimos, tais quais, ler o conteúdo do arquivo e também escrever nele.

Que parâmetros a função aceita?

Os parâmetros aplicáveis quando utilizamos open(), segundo a documentação, são:

open(file, mode='r', buffering=- 1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

image

Apesar de parecer serem muitos, os principais argumentos que precisaremos dominar e que utilizaremos com mais frequência são apenas três: file, mode e encoding.

file

É o caminho (path-like-object) para o arquivo que se deseja criar ou ler, algo parecido com "./algum_diretorio/nome_do_arquivo.txt";

mode

É uma string opicional que determina de que maneira o arquivo será aberto. Apesar de opicional, o mode é relevante para determinar certos comportamentos da função open(). Por exemplo, quando passamos mode = 'rt' (padrão), queremos abrir um arquivo que já existe para leitura ('r') e o mesmo será interpretado como arquivo de texto ('t'). As strings que podemos passar neste argumento e suas funcionalidades são:

  • 'r' : abre um arquivo que já exista arquivo para leitura;
  • 'w': abre um novo arquivo para escrita, caso exista um arquivo no caminho especificado, ele será sobescrito;
  • 'x': abre um novo arquivo, apenas se não houver nenhum arquivo no caminho especificado;
  • 'a': abre m arquivo para escrita, caso já exista um arquivo no caminho especificado, as mudanças serão adicionadas ao fim do arquivo;
  • 'b': especifica que o arquivo deverá ser interpretado no modo binário;
  • 't': especifica que o arquivo deverá ser interpretado no modo texto (padrão);
  • '+': abre o arquivo para atualizações (ler e escrever).

encoding

Como esperado, este parâmetro permite que especifiquemos o encoding desejado para a intepretação do arquivo de texto. Deve-se lembrar que este parâmetro só deve ser utilizado em arquivos de texto. Apesar parecer que, hoje em dia, talvez 99% dos casos estaremos lidando com textos em encoding 'utf-8', eu mesmo já precisei utilizar 'cp1252' em um certo projeto pessoal.

Dessa maneira, é sempre bom sabermos que é possível se escolher esse parâmetro. Vale a pena lembrar, que quando omitido, o encoding padrão será escolhido a depender da plataforma utilizada através da função locale.getencoding().

E o resto?

Se a curiosidade está clamando para saber dos detalhes outros argumentos, recomenda-se novamente uma lida com carinho na documentação oficial.

Mão na massa! Vejamos um exemplo

image

Vamos criar um arquivo chamado "notas" para escrevermos nele a notas da escala maior natural. Podemos fazer isso da seguinte maneira:

#### SCRIPT 1 ####
#Abrindo o arquivo notas.txt
notas_muscais = open('notas.txt', 'w', encoding='utf-8')

#escrevendo as notas
notas_muscais.write("dó")
notas_muscais.write("-ré")
notas_muscais.write("-mi-fá-sol-lá-si")

#fechando o arquvo
notas_muscais.close()

Note que, além da função open, utilizamos os métodos write() e close() para, respectivamente, escrever no arquivo que criamos e posteriormente fechá-lo após feitas as alterações.

Ao ser executado, esse código criará no mesmo diretório do script um arquivo chamado "notas.txt" com o seguinte conteúdo:

dó-ré-mi-fá-sol-lá-si

Na teoria musical, existem notas intermediárias que são chamadas de sustenidos e bemóis, representados pela incorporação do sinal "#" ou pela letra "b" as notas, respectivamente.

Com este conceito em mente, podemos escrever a escala cromática, composta de 12 notas naturais e sustenidas/bemóis: dó-dó#-ré-dé#-mi-fá-fá#-sol-sol#-lá#-si. Então, vamos escrever a escala cromática logo após a escala natural no nosso arquivo, vamos tentar outro script:

#### SCRIPT 2 ####
#Abrindo o arquivo notas.txt
notas_escala_maior = open('notas.txt', 'w', encoding='utf-8')

#Adicionando quebra de linha
notas_muscais.write("\n")

#Adicionando escala cromática
notas_muscais.write("C-C#-D-D#-E-F-F#-G-G#-A#-B")

#fechando o arquvo
notas_muscais.close()

Após executar, abrimos o arquivo notas e vemos:

C-C#-D-D#-E-F-F#-G-G#-A#-B

Ué? Pra onde foi a escala maior natural? Os mais atentos perceberão que ela foi sobrescrita, afinal, utilizamos o mode 'w' que, por definição, sobrescreve o arquivo caso ele já exista. Uma maneira de adicionarmos a escala cromática ao arquivjo já gerado pelo primeiro script é apenas mudar o mode para 'a', dessa maneira adicionaremos as mudanças no fim do arquivo. Assim teríamos, ao todo:

#### SCRIPT 1 ####
#Abrindo o arquivo notas.txt
notas_muscais = open('notas.txt', 'w', encoding='utf-8')

#escrevendo as notas
notas_muscais.write("dó")
notas_muscais.write("-ré")
notas_muscais.write("-mi-fá-sol-lá-si")

#fechando o arquvo
notas_muscais.close()

#### SCRIPT 3 ####
#Abrindo o arquivo notas.txt
notas_muscais= open('notas.txt', 'a', encoding='utf-8')

#Adicionando quebra de linha
notas_muscais.write("\n")

#Adicionando escala cromática
notas_muscais.write("C-C#-D-D#-E-F-F#-G-G#-A#-B")

#fechando o arquvo
notas_muscais.close()

Voilà, após a execução teremos agora, abrindo o arquivo "notas.txt" já existente com mode = 'a', o conteúdo:

dó-ré-mi-fá-sol-lá-si
dó-dó#-ré-dé#-mi-fá-fá#-sol-sol#-lá#-si

E por hoje é isso. Estou aberto a críticas construtivas e devidas correções de alguma informação errada ou incompleta que possa ter sido passada no artigo. Até a próxima.

artigo.close()

Compartilhe
Comentários (2)
Guilherme Gomes
Guilherme Gomes - 13/01/2024 14:46

Que bom que gostou Wallace! Fico feliz de verdade. Notei alguns vacilos que dei no exemplo mas ainda não consegui corrigir pois parece haver um bug na função de editar. Enfim, vou sim checar seu artigo =)

Wallace Firmo
Wallace Firmo - 11/01/2024 08:21

Que massa... bem completo!


TOP demais. Já me ganhou na frase de abertura sobre a MENTE. Sou de desenvolvimento humano, tudo associado a isso já tem meu like!


Eu acabei falando Marketing e RPA, como automatizar o Whatsapp usando a função FOR. Se quiser conferir: https://web.dio.me/articles/automatizando-o-marketing-no-whatsapp-com-python-um-guia-pratico-de-rpa