Article image
Kauã Fabricio
Kauã Fabricio10/01/2024 21:40
Compartilhe

Descomplicando a função open() em Python: aprenda a manipular arquivos

  • #Python

É de conhecimento da comunidade Python, o tanto de funções que esta linguagem de programação oferece, as quais são ferramentas úteis para solucionar uma variedade de problemas envolvendo a tecnologia. Neste artigo, abordarei sobre a função open() em Python, a qual desempenha um papel importante na leitura e escrita de arquivos, um aspecto essencial para desenvolver aplicações e manipular dados.

Função open()

O recurso open() retorna um objeto arquivo possível de manipulação, isto é, leitura e escrita do mesmo. A estrutura de chamada mais comum e utilizada é:


  open(nome_do_arquivo, modo, encoding=None)
 

Dois argumentos posicionais (nome_do_arquivo e modo), e um argumento nomeado (encoding). Intuitivamente, primeiro argumento posicional é uma string contendo o nome do arquivo, caso o arquivo desejado esteja no diretório atual, apenas o nome é necessário, mas se estiver em outro diretório, digite o caminho completo. Temos o segundo argumento posicional, que também é uma string, contendo alguns caracteres que descrevem o modo que o arquivo será usado. Em seguida, o argumento nomeado 'encoding' faz referência à codificação no modo texto, isto é, de binário para caracteres (se o arquivo for aberto no modo binário, o encoding obviamente não será necessário). Neste argumento, o padrão mais moderno na web e em sistemas operacionais é o UTF-8, mas caso seja omitido, o padrão é definido pela plataforma.

Modos do open():

image

Imagem informativa sobre os principais modos de uso do arquivo na função open() em Python.

Caso o modo seja omitido, o padrão da função é 'r' (read). O modo 't' (text) também é incluído como padrão no modo. Mas, em diferentes cenários, a utilização de outro modo pode ser mais adequado, como: 'b' (modo binário), 'w+' (escrita + leitura, apaga o conteúdo existente), 'w+b' (escrita + leitura, apagando o conteúdo existente e em modo binário), 'r+b' (leitura + escrita, sem apagar o conteúdo existente e em modo binário), entre vários outros.

Que tipos de arquivos a função open() suporta?

Na verdade, a função suporta uma variedade de arquivos, sendo bastante flexível, exemplo: arquivos de texto, arquivos binários (como imagem, e áudio para leitura binária 'rb', escrita binária 'wb' ou adição binária 'ab'), arquivos de texto Unicode, arquivos especiais do sistema, entre outros.

Para finalmente conseguir manipular o arquivo desejado, é importante ter conhecimento sobre os métodos do objeto arquivo.

Métodos do objeto arquivo

Para ser possível manipular o objeto arquivo que é criado após a chamada da função open(), foram criados métodos que simplifica essa manipulação.

Para isso vamos criar um objeto arquivo de texto e atribuir a variável 'arquivo':


  arquivo = open('arquivo.txt', 'r+', encoding='utf-8')
 

write(string):

Este método escreve no arquivo, recebendo como argumento uma string (ou seja, é necessário converter para string, caso não seja).


  arquivo.write('Essa é a primeira linha do arquivo')
 

read(tamanho):

Este método recebe opcionalmente um argumento 'tamanho' que se refere a quantidade de caracteres que será lido (incluindo espaços). Caso esse argumento seja omitido, o padrão é ler todo o arquivo.

readline() e readlines():

Método readline() lê apenas uma linha do arquivo, uma maneira alternativa simples de ler todas as linhas com este método é iterando com for:


  arquivo.write('\nEssa é a segunda linha do arquivo')
  for line in arquivo:
      print(line, end='')
   

ou usando o método readlines():


  arquivo.readlines()

A saída foi:

Essa é a primeira linha do arquivo
Essa é a segunda linha do arquivo

Atente-se ao ponteiro no arquivo quando for realizar alguma escrita, pois alguns modos têm como padrão o ponteiro no início, e ao fazer a escrita pode ocorrer perda de dados por substituição. Mas não se preocupe, existem dois métodos relacionado a isso: um informa onde o ponteiro se encontra no arquivo, e o outro manipula a posição do ponteiro.

tell() e seek(offset, de_onde):

Ao chamar o método tell(), a posição do ponteiro será informado na saída.


  print(arquivo.tell())

A saída foi:

0

Percebe-se que o ponteiro está no início, isso se dá por conta do modo de uso 'r+' do meu objeto arquivo, que, como padrão, posiciona o ponteiro no início do arquivo.

Então, para manipular o ponteiro, usa-se o método seek():


  arquivo.seek(0, 2)
 

Nesse método seek(offset, de_onde), o offset é o deslocamento do ponteiro de acordo com um ponto de referência 'de_onde', que é o segundo argumento. Para referências temos:

'0': início do arquivo

'1': posição atual do arquivo

'2': final do arquivo

Como quero deslocar apenas para o final do arquivo, então offset = 0, e de_onde = 2.


  print(arquivo.tell())
 

A saída foi:

71

Existem outros métodos, que não são utilizados com tanta frequência, então, não irei adicioná-los neste artigo.

Lembre-se de fechar o arquivo para liberar recursos ao sistema operacional:


  arquivo.close()
 

Boas práticas com with/as

O recurso with/as do Python é muito útil. Quando utilizado para criação do objeto arquivo com open(), não é necessário fechar o objeto arquivo com close(), pois ele é fechado automaticamente.


  with open('arquivo.txt', 'r+', encoding='utf-8') as f:
      f.seek(0, 2)
      f.write('\nEssa é a terceira linha do arquivo')

  # Neste código acima, o objeto arquivo foi atribuído à variável 'f'.
 

  with open('arquivo.txt', 'r+', encoding='utf-8') as f:
      print(f.read())
 

 

A saída foi:

Essa é a primeira linha do arquivo
Essa é a segunda linha do arquivo
Essa é a terceira linha do arquivo

  with open('arquivo.txt', 'w', encoding='utf-8') as f:
      for linha in range(1, 11):
        f.write(f'Essa é a linha número: {linha}')
 

código executado, vamos para leitura:


  with open('arquivo.txt', 'r', encoding='utf-8') as f:
      print(f.read())
 

A saída foi:

Essa é a linha número: 1
Essa é a linha número: 2
Essa é a linha número: 3
Essa é a linha número: 4
Essa é a linha número: 5
Essa é a linha número: 6
Essa é a linha número: 7
Essa é a linha número: 8
Essa é a linha número: 9
Essa é a linha número: 10

Fluxo da função open():

image

Como foi citado no início, a estrutura de chamada open() mais utilizada e comum é:


  open(nome_do_arquivo, modo, encoding=None)

Mas dentro da função existem outros argumentos opcionais que podem ser incluídos em um determinado contexto. Não os citei nesse artigo, pois esses argumentos são usados em cenários específicos.

 
open(nome_do_arquivo, modo, enconding=None, errors=None, newline=None, closefd=True, opener=None)
 

Conclusão

Em síntese, vimos a utilidade da função open() em manipular arquivos através do Python de maneira descomplicada, como prometido no título, e abstraída para facilitar o aprendizado (simplicidade é o sobrenome do Python). Para quaisquer dúvidas, curiosidades, ou necessidades, consulte a documentação do Python, na qual me baseei para aprender e escrever este artigo.

Links para a documentação Python:

https://docs.python.org/pt-br/3/tutorial/inputoutput.html#reading-and-writing-files

https://docs.python.org/pt-br/3/library/functions.html#open

Compartilhe
Comentários (4)
Kauã Fabricio
Kauã Fabricio - 16/01/2024 19:28

Obrigado, Carlos! Fico feliz que gostou!

CE

Carlos Eduardo - 14/01/2024 17:43

Parabéns pelo artigo, achei bem direto e claro.

Kauã Fabricio
Kauã Fabricio - 11/01/2024 17:32

Que bom que gostou, Lívia! Muito obrigado pelo comentário!

LA

Lívia Almeida - 11/01/2024 15:45

Artigo muito bom mesmo, Kauã, super completo e detalhado!