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