Como lidar com arquivos em Python

Em qualquer linguagem de programação, o manuseio de arquivos é um aspecto importante. E o Python também oferece suporte ao trabalho com arquivos em diferentes modos, como leitura e gravação em arquivos e muito mais.

Ao final deste tutorial, você será capaz de:

  • abrir e ler arquivos em Python,
  • ler linhas de um arquivo de texto,
  • escrever e anexar a arquivos, e
  • use gerenciadores de contexto para trabalhar com arquivos em Python.

Como ler arquivo em Python

Para abrir um arquivo em Python, você pode usar a sintaxe geral: open(‘file_name’,’mode’).

  • Aqui, file_name é o nome do arquivo.

Nota: Se o arquivo que você deseja abrir estiver no diretório de trabalho atual, você pode mencionar apenas o nome do arquivo. Se estiver em outra pasta em seu ambiente de trabalho, inclua o caminho para o arquivo.

  • O modo de parâmetro especifica o modo no qual você deseja abrir o arquivo.

O modo padrão para abrir um arquivo é lido—indicado pela letra ‘r’. No entanto, é uma prática recomendada especificar o modo explicitamente.

Antes de começarmos, vamos dar uma olhada no arquivo lib.txt, que usaremos neste exemplo.

📁 Baixe o arquivo de texto e o código usado neste tutorial em este repositório do GitHub.

O trecho de código abaixo mostra como você pode abrir um arquivo de texto ‘lib.txt’ em Python usando a função open() e ler seu conteúdo.

file = open('lib.txt','r')
contents = file.read()
print(contents)
file.close()


# Output
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

No exemplo acima,

  • A função open() retorna um objeto de arquivo e escolhemos chamá-lo de arquivo.
  • Em seguida, chamamos o método read() no arquivo.
  • O conteúdo da variável agora contém o conteúdo do arquivo. E nós imprimimos.
  • Por fim, fechamos o arquivo.
  Como jogar Couch Co-Op em "Animal Crossing: New Horizons" (com um console de switch)

No entanto, se você esquecer de fechar o arquivo, haverá um possível desperdício de recursos. Se você estiver trabalhando com um grande número desses arquivos, pode haver um uso substancial de memória. Isso ocorre porque você abriu vários arquivos, mas não fechou nenhum deles.

Agora, vamos aprender uma maneira melhor de abrir arquivos usando gerenciadores de contexto. O trecho de código abaixo mostra como você pode usá-los.

with open('lib.txt','r') as f:
  contents = f.read()
  print(contents)

Ao usar gerenciadores de contatos para trabalhar com arquivos, você não precisa usar o método close(). Os arquivos são fechados automaticamente após a conclusão da operação de E/S.

Como ler linhas do arquivo em Python

Em nosso arquivo de texto de exemplo, tínhamos apenas algumas linhas. Portanto, ler todo o conteúdo do arquivo de uma só vez não foi um problema.

No entanto, quando você precisa ler em arquivos grandes, usar o método read(), como mostrado acima, pode não ser muito eficiente.

Na verdade, se o arquivo de texto for muito grande, você poderá ficar sem memória em breve. É por isso que você pode querer ler em linhas somente leitura de um arquivo de texto, e você aprenderá como fazer isso nesta seção.

Usando o método readline() do Python para ler linhas do arquivo

O método readline() lê uma linha por vez, do arquivo.

Execute o trecho de código a seguir.

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  line = f.readline()
  print(line)


# Output
Hello, there!

Here are a few helpful Python libraries:

Você pode ver que após a primeira chamada do método readline(), a primeira linha do arquivo é impressa. E a segunda chamada para o método readline() retorna a segunda linha do arquivo.

Isso ocorre porque, após a primeira chamada de método, o ponteiro do arquivo está no início da segunda linha.

Em Python, você pode usar o método tell() para obter a localização atual do ponteiro do arquivo. E para mover o ponteiro do arquivo para um local específico, você pode usar o método seek().

No trecho de código abaixo, usamos f.seek(0) após a primeira chamada de método. Isso move o ponteiro do arquivo para o início do arquivo de texto. É por isso que, nas duas vezes, a primeira linha do arquivo é impressa.

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  f.seek(0)
  line = f.readline()
  print(line)


# Output
Hello, there!

Hello, there!

Usando o método readlines() do Python para ler linhas do arquivo

Há outro método intimamente relacionado chamado readlines().

  Como mudar seu nome no Google Meet

Ao executar o trecho de código a seguir, você verá que o método readlines() retorna uma lista de todas as linhas do arquivo.

with open('lib.txt','r') as f:
  lines = f.readlines()
  print(lines)


# Output
['Hello, there!n', 'Here are a few helpful Python libraries:n', 
'1) NumPyn', '2) pandasn', '3) matplotlibn', 
'4) seabornn', '5) scikit-learnn', '6) BeautifulSoupn', 
'7) Scrapyn', '8) nltkn', '9) Bokehn', '10) statsmodelsn', 'n']

Usando o Python para Loop para ler linhas do arquivo

Para ler as linhas de um arquivo de texto, você também pode usar o loop for.

Depois de ter um objeto de arquivo, você pode usar o loop for para percorrer o conteúdo do arquivo – uma linha de cada vez e imprimi-los, conforme mostrado abaixo. Observe como estamos acessando apenas uma linha por vez e não lendo todo o conteúdo do arquivo.

with open('lib.txt','r') as f:
  for line in f:
    print(line, end='')

Nota: Ao usar a função print() do Python, o separador padrão é um caractere de nova linha—’n’. Mas no arquivo original, não temos essas novas linhas. Portanto, defina o argumento separador para uma string vazia: end = ” para imprimir o conteúdo do arquivo como está.

Como ler pedaços de conteúdo de arquivo em Python

Em Python, você também pode optar por ler o conteúdo do arquivo em termos de pequenos pedaços.

Leia o código abaixo:

  • Aqui, definimos o chunk_size como 50. Isso significa que os primeiros 50 caracteres do arquivo serão lidos e também os imprimimos.
  • Agora, chame o método tell() no objeto de arquivo f. Você pode ver que o ponteiro do arquivo está agora na posição 51—que é o esperado.
chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk)
  current = f.tell()
  print(f"Current position of file pointer: {current}")

# Output
Hello, there!
Here are a few helpful Python librar
Current position of file pointer: 51

Você também pode usar essa técnica para ler o arquivo inteiro em termos de pequenos pedaços.

  9 Software de gerenciamento de desempenho para avaliar seus funcionários

O trecho de código a seguir mostra como você pode fazer isso.

chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk,end='')

  while(len(chunk)>0):
    chunk = f.read(chunk_size)
    print(chunk,end='')

# Output
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

Aqui, usamos um loop while para ler o conteúdo do arquivo. Lemos o conteúdo do arquivo em um pedaço de tamanho 50 até chegarmos ao final do arquivo. ✅

Como gravar em arquivo em Python

Para gravar em um arquivo de texto em Python, você deve abri-lo no modo de gravação – especificando ‘w’.

O trecho de código abaixo mostra como fazer isso.

with open('new_file.txt','w') as f:
  f.write('Hello, Python!')

Você verá que ‘new_file.txt’ foi criado em seu diretório de trabalho.

Agora, execute a célula de código acima mais uma vez.

No seu terminal execute o seguinte comando:

cat new_file.txt

# Output: Hello, Python!

Idealmente, escrevemos no arquivo duas vezes. Então Olá, Python! deveria ter sido impresso duas vezes, sim?

Mas você verá que ele foi impresso apenas uma vez. Bem, isso ocorre porque quando você abre um arquivo no modo de gravação (w), basicamente substitui o conteúdo do arquivo por um novo conteúdo.

Se você quiser adicionar ao final do arquivo sem substituir o conteúdo existente, abra o arquivo no modo de acréscimo. E você verá como fazer isso na próxima seção.

Como anexar ao arquivo em Python

Se desejar anexar conteúdo a um arquivo — sem sobrescrever, abra-o no modo de anexação.

Para fazer isso, use `’a’—a para append—e especifique o modo explicitamente.

Em seguida, execute a célula de código a seguir duas vezes.

with open('new_file.txt','a') as f:
  f.write('Hello, Python!')

Observe como o texto é impresso duas vezes agora, conforme anexamos ao arquivo.

cat new_file.txt

# Output: Hello, Python!Hello, Python!

Conclusão

Vamos resumir rapidamente o que vimos neste tutorial.

  • Você aprendeu as operações comuns de E/S de arquivo, como ler, gravar e anexar a um arquivo.
  • Além disso, você também aprendeu a usar o método seek() para mover o ponteiro do arquivo para uma posição específica e
  • como usar o método tell() para recuperar a posição atual do ponteiro de arquivo.

Espero que você tenha achado este tutorial útil. Agora que você aprendeu a trabalhar com arquivos de texto em Python, aprenda a trabalhar com arquivos JSON em Python.

Relacionado:

Verifique o comprimento de uma lista em Python em 3 etapas.