English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial Básico de Python

Controle de Fluxo Python

Funções do Python

Tipos de Dados do Python

Operações de Arquivo Python

Objetos e Classes Python

Data e Hora Python

Conhecimento Avançado Python

Manual de Referência Python

Python ArquivoI/O

O que é um arquivo?

O arquivo é uma posição nomeada no disco rígido usada para armazenar informações relacionadas. Ele é usado para armazenar dados permanentemente em memória não volátil (como disco rígido).

Devido à volatilidade da memória de acesso aleatório (RAM), os dados são perdidos quando o computador é desligado, portanto, usamos arquivos para uso futuro de dados.

Quando precisamos ler ou escrever em um arquivo, precisamos primeiro abri-lo. Após concluir, é necessário fechá-lo para liberar os recursos associados ao arquivo.

Portanto, nas operações de arquivo do Python, a ordem é a seguinte.

  1. Abrir o arquivo

  2. Ler ou escrever (executar operação)

  3. Fechar o arquivo

Como abrir um arquivo?

O Python possui a função integrada open() para abrir arquivos. Esta função retorna um objeto de arquivo, também conhecido como柄, pois é usado para ler ou modificar o arquivo de maneira apropriada.

>>> f = open("test.txt") # Abrir o arquivo no diretório atual
>>> f = open("C:/Python33/README.txt") # Especificar o caminho completo

Podemos especificar o modo ao abrir o arquivo. No modo, especificamos se queremos ler 'r', escrever 'w' ou anexar 'a' ao arquivo. Também especificamos se queremos abrir o arquivo em modo texto ou binário.

A configuração padrão é ler em modo texto. Neste modo, ao ler do arquivo, obteremos uma string.

Por outro lado, o modo binário retorna bytes, que é o modo a ser usado para manipular arquivos não-texto (como imagens ou arquivos exe)

Modos de arquivo Python
ModoDescrição
'r'Abrir o arquivo para leitura. (Padrão)
'w'Abrir o arquivo para escrita. Se não existir, criar um novo arquivo, ou se existir, truncá-lo.
'x'Abrir o arquivo para criação exclusiva. Se o arquivo já existir, a operação falhará.
'a'Abrir para anexar no final do arquivo sem truncar. Se não existir, criar um novo arquivo.
't'Abrir em modo texto. (Padrão)
'b'Abrir em modo binário.
'+'Abrir o arquivo para atualização (leitura e escrita)
f = open("test.txt") # Igual a 'r' ou 'rt'
f = open("test.txt",'w') # Escrever em modo texto
f = open("img.bmp",'r+b') # Ler e escrever em modo binário

Diferente de outros idiomas, o caractere 'a' não sugere um número antes de ser codificado em ASCII (ou qualquer codificação equivalente)97 .

Além disso, a codificação padrão depende da plataforma. No Windows, 'cp'1252'Mas 'utf-8'No Linux.

Portanto, também não podemos depender da codificação padrão, pois o comportamento do código pode variar em diferentes plataformas.

Portanto, ao lidar com arquivos em modo texto, é altamente recomendável especificar o tipo de codificação.

f = open("test.txt",mode = 'r',encoding = 'utf-8')

Como usar Python para fechar um arquivo?

Após concluir as operações no arquivo, precisamos fechar o arquivo corretamente.

Fechar o arquivo libera os recursos associados ao arquivo e é feito usando o método close().

Python tem um coletor de lixo para limpar objetos não referenciados, mas, absolutamente, não podemos depender dele para fechar arquivos.

f = open("test.txt",encoding = 'utf-8')
# Executar operações de arquivo
f.close()

Esse método não é completamente seguro. Se ocorrer uma exceção ao executar algumas operações no arquivo, o código sairá sem fechar o arquivo.

Uma maneira mais segura é usartry ... finallybloco.

try:
   f = open("test.txt",encoding = 'utf-8')
   # Executar operações de arquivo
finally:
   f.close()

Dessa forma, podemos garantir que o arquivo seja fechado corretamente mesmo se houver uma exceção, o que faz com que o fluxo do programa pare.

O melhor método é usar a declaração with. Isso garante que o arquivo seja fechado corretamente ao sair do bloco.

Não precisamos chamar explicitamente o método close(). Ele é feito internamente.

with open("test.txt",encoding = 'utf-8) as f:
   # Executar operações de arquivo

Como usar Python para escrever em um arquivo?

Para escrever em um arquivo usando Python, podemos escrever no modo 'w', anexar no modo 'a' ou criar exclusivamente no modo 'x'.

Precisamos usar com cautela o modo 'w', pois ele substitui o arquivo (se já existir). Todos os dados anteriores serão deletados.

Escrever strings ou sequências de bytes (para arquivos binários) é feito usando o método write(). Este método retorna o número de caracteres escritos no arquivo.

with open("test.txt",'w',encoding = 'utf-8) as f:
   f.write("my first file\n")
   f.write("This file\n\n")
   f.write("contains three lines\n")

Se 'test.txt' não existir, o programa criará um arquivo novo com o nome. Se já existir, ele o substituirá.

Precisamos incluir manualmente o caractere de nova linha para distinguir diferentes linhas.

Como ler um arquivo no Python?

Para usar Python para ler arquivos, devemos abrir o arquivo no modo de leitura.

existem várias maneiras de fazer isso. Podemos usar o método read(size) para lertamanhodados. Se não for especificadotamanhoparâmetros, que irão ler e retornar até o final do arquivo.

>>> f = open("test.txt",'r',encoding = 'utf-8')
>>> f.read(4)                  # Ler o anterior4dados
"Este"
>>> f.read(4)                  # Ler o próximo4dados
"é"
>>> f.read()                # Ler o resto até o final do arquivo
"meu primeiro arquivo\nEste arquivo\ncontém três linhas\n"
>>> f.read()             # Leitura adicional retorna uma string vazia
""

Podemos ver que o método read() retorna o caractere de nova linha '\n'. Após atingir o final do arquivo, teremos uma string vazia na leitura adicional.

Podemos usar o método seek() para alterar o cursor (posição) atual do arquivo. Da mesma forma, o método tell() retorna nossa posição atual (em bytes).

>>> f.tell()            # Obter a posição atual do arquivo
56
>>> f.seek(0)            # Mover o cursor do arquivo para a posição inicial
0
>>> print(f.read())        # Ler todo o arquivo
Este é o meu primeiro arquivo
Este arquivo
contém três linhas

Podemos usarLoop forLer linha a linha o arquivo. Isso é eficiente e rápido.

>>> for line in f:
...      print(line, end = '')
...
Este é o meu primeiro arquivo
Este arquivo
contém três linhas

As linhas do arquivo próprio têm o caractere de nova linha '\n'.

Além disso, o parâmetro final do print() evita duas quebras de linha ao imprimir.

Ou, podemos usar o método readline() para ler as linhas individuais do arquivo. Este método lê o arquivo até o caractere de nova linha, incluindo-o.

>>> f.readline()
"Este é o meu primeiro arquivo\n"
>>> f.readline()
"Este arquivo\n"
>>> f.readline()
"contém três linhas\n"
>>> f.readline()
""

Por fim, o método readlines() retorna uma lista com o resto das linhas do arquivo. Quando atingimos o final do arquivo (EOF), todos esses métodos de leitura retornarão um valor vazio.

>>> f.readlines()
['Este é o meu primeiro arquivo\n', 'Este arquivo\n', 'contém três linhas\n']

Métodos de arquivo do Python

O objeto de arquivo tem muitos métodos disponíveis. Alguns foram usados nos exemplos acima.

Esta é a lista completa dos métodos no modo de texto, com descrições breves.

Métodos de arquivo do Python
close()Fechar o arquivo.
detach()Retornar o fluxo bruto (raw stream) separado do buffer.
fileno()Retornar o número representativo do fluxo do sistema operacional.
flush()Atualizar o buffer interno.
isatty()Retornar se o fluxo de arquivo é interativo.
read()Retornar o conteúdo do arquivo.
readable()Retornar se é possível ler o fluxo de arquivo.
readline()Retornar uma linha do arquivo.
readlines()Retornar uma lista de linhas do arquivo.
seek()Alterar a posição do arquivo.
seekable()Retornar se o arquivo permite que alteremos a posição do arquivo.
tell()Retornar a posição atual do arquivo.
truncate()Ajustar o tamanho do arquivo para o tamanho especificado.
writeable()Retornar se é possível escrever no arquivo.
write()Escrever uma string específica em um arquivo.
writelines()Escrever uma lista de strings em um arquivo.