Um Guia Para Devs: Manipulação De Arquivos.txt
- #Python
Olá, meu querido usuário!
Se você gosta de ver animes, filmes ou séries, você já deve ter visto algum personagem manipulando alguma coisa como objetos ou um dos quatro elementos da natureza, certo? Bom, na ficção eles manipulam essas coisas, mas na vida real manipulamos arquivos e esse vai ser o assunto de hoje.
O arquivo que iremos manipular hoje será um arquivo txt e a linguagem será Python, beleza? Vamos começar.
Abrir Um Arquivo
Para abrir um arquivo, precisamos de 3 coisas:
- Precisamos da função open();
- Precisamos do caminho do arquivo;
- Precisamos escolher qual modo usaremos nesse arquivo.
Pegando essas 3 coisas e misturando tudo, teremos como resultado (temporário) o seguinte:
open('caminho.txt', 'modo de uso')
Mas esse código funciona? Ainda não. Precisamos substituir alguns elementos aí.
Primeiro, eu preciso que você informe onde o seu arquivo está e qual é o nome dele. Caso o seu arquivo não exista, você vai informar em qual pasta ele vai ficar e qual será o nome dele,
Segundo, eu preciso que você informe o que deseja fazer com o arquivo, você quer ler? Escrever? Existem algumas opções, como essas:
Para entender como cada uma dessas letrinhas funciona, eu vou te mostrar um passo a passo do que cada uma faz e no final você terminará esse artigo fazendo seus próprios arquivos txt. Vamos lá!
Gerar Um Arquivo
Existem muitas formas de se gerar um arquivo, mas cada uma delas traz uma consequência diferente para o seu arquivo.
Gerando Um Arquivo Com 'x'
O primeiro modo que podemos usar é o modo 'x'. Com ele você consegue gerar um arquivo, mas se o seu arquivo já existir, você receberá uma mensagem de erro. Então, certifique-se de que o arquivo realmente não existe.
Para utilizar o 'x', usaremos a seguinte sintaxe:
Uma observação: para que o arquivo seja fechado, utilizaremos o close(). Ao final do artigo ele não será mais utilizado, mas por enquanto precisamos adicioná-lo no código, tá?
Gerando Um Arquivo Com 'w'
O segundo modo que podemos usar é o modo 'w'. Com ele você pode gerar um arquivo, caso o arquivo não exista. Entretanto, se o arquivo existir, o conteúdo dele será eliminado. Você também pode usar o 'w' para escrever no arquivo.
Para utilizar o 'w', usaremos a seguinte sintaxe:
Gerando Um Arquivo Com 'a'
O terceiro modo que podemos usar é o modo 'a'. Ele é semelhante ao 'w', a única diferença é que ele não apaga o conteúdo do arquivo. Ele também serve para escrever no arquivo, mas como dito anteriormente, ele não apaga o conteúdo, na verdade ele incrementa o conteúdo com um novo trecho.
Para utilizar o 'a', usaremos a seguinte sintaxe:
Escrever No Arquivo
Agora que conseguimos gerar um arquivo txt, precisamos escrever alguma coisa nele. Para fazer isso, utilizaremos o modo 'a' ou modo 'w' (sua preferência) junto com a função write() ou a função writelines().
Diferença entre write() e writelines()
Quando você opta por usar o write(), você consegue escrever um texto em uma String, mas quando você usa writelines(), você consegue utilizar uma lista no seu arquivo. Se tentar aplicar uma lista no write() você receberá uma mensagem de erro.
Quando utilizamos write(), nossa sintaxe fica assim:
Quando utilizamos writelines(), nossa sintaxe fica assim:
Ler Um Arquivo:
Para ler um arquivo txt, utilizamos o modo 'r' e algumas funções, como:
read(): lê o arquivo inteiro;
readline(): lê a primeira linha;
readlines(): lê o arquivo inteiro e retorna o texto em formato de lista.
Para verificarmos como cada uma dessas funções agem, iremos utilizar esse arquivo como base para ser lido:
Ler Arquivo Com read():
A nossa sintaxe será assim:
Nosso retorno será esse:
Ler Arquivo Com readline():
Como dito anteriormente, o readline() lê a primeira linha, portanto, apenas "Maçã" será exibida.
Nossa sintaxe será assim:
Nosso retorno será esse:
Ler Arquivo Com readlines():
Por fim, o readlines(). Essa função retornará nosso texto em forma de lista.
Nossa sintaxe será assim:
Nosso retorno será esse:
Modo De Uso: 'b', 't', e '+'
Já conseguimos abrir, ler e escrever no nosso arquivo. O que falta? Falta verificar os últimos modos e aprender a usar o '+' no nosso código.
Quando falamos do modo 'b', estamos falando do modo binário que trata outros tipos de arquivos. Um exemplo são arquivos de imagem.
Quando falamos do modo 't', estamos falando do modo texto que é o modo padrão. Portanto, se você não especificar um modo para abrir o seu arquivo, o Python abrirá o arquivo no modo texto.
Por fim, temos o '+' que é útil quando você quer fazer mais de uma ação no seu arquivo. Vou te mostrar.
Modo De Uso '+': Escrita e Leitura
Imagine que você quer escrever no seu arquivo e depois quer verificar o texto que foi inserido. Se você tentar fazer isso da forma que foi colocado na imagem abaixo, você receberá um erro.
Para que isso não ocorra, podemos utilizar o '+' junto da letra 'w'. Dessa forma, entende-se que iremos escrever no nosso arquivo e lê-lo em seguida.
Entretanto, se você fizer do jeito que fiz na imagem acima, você não conseguirá visualizar o texto que foi inserido no arquivo. O código não está incorreto, o problema é o seguinte:
Quando escrevemos no arquivo, o cursor se move para a direita até a última palavra ser adicionada. Depois que o texto que digitamos termina, o cursor permanece no final da última palavra escrita. Então, quando você chama a função read(), você não visualiza nenhuma informação, porque o cursor está no final da última palavra.
Para resolver isso, usaremos a função seek() com o paramêtro 0. Dessa forma, o cursos voltará para o início da primeira palavra e conseguiremos visualizar o texto.
Nossa sintaxe ficará dessa forma:
Boas Práticas:
Já conseguimos manipular nosso arquivo txt sem muitos problemas, mas esse artigo ainda não acabou. Falta mais um assunto (prometo que será o último tópico, aguenta firme).
De acordo com a documentação, é uma boa prática utilizar a palavra-chave "with" ao manipular arquivos. As vantagens são:
- O arquivo será fechado corretamente;
- Mais curto do que usar try-finally;
- Não é necessário utilizar o comando close() no final.
Portanto, para que nosso código siga as boas práticas, precisamos adicionar algumas informações. Abaixo você verá o código no formato que usamos nesse artigo e na linha 8 o formato baseado nas boas práticas.
Se você olhou para esse código e pensou "Como eu vou me lembrar disso?" não se preocupa, eu vou te mostrar que é bem fácil de lembrar.
Primeiro você precisa lembrar que o 'with' vem primeiro, depois você adiciona o open() da mesma forma que você fazia antes, logo em seguida você adiciona o 'as'. Mas o que significa 'as'? Basicamente estamos falando de uma palavra que é usada para nomear coisas, no caso acima, estamos chamando de 'arquivo' todo o comando que veio antes do 'as'.
Se ficar confuso, relaxa. Preparei um exemplo aqui que vai te esclarecer tudo isso de uma vez por todas. Observe:
No módulo 'time' tem uma função chamada 'sleep' que eu "renomeei" como 'pausa', então quando eu quiser usar a função sleep no meu código, eu posso escrever pausa() sem problema algum. Percebe que ao utilizar o 'as' eu nomeei a instrução, que vem antes do 'as', de 'pausa'? É exatamente isso que está acontecendo naquele código onde foi usado o with. Fácil, não?
Bom usuário, esse foi o artigo de hoje. Espero que eu tenha conseguido ser o mais didática possível, espero que esse artigo tenha sido útil para você e espero que você tenha muito sucesso nos estudos.
Até o próximo artigo. Bye!
REFERÊNCIAS: