
💡 Gorjeta: Esses são os dois argumentos mais usados para chamar essa função. Existem seis argumentos opcionais adicionais. Para saber mais sobre eles, leia Este artigo na documentação.
Primeiro Parâmetro: Arquivo
O primeiro parâmetro do open()
função é file
, o caminho absoluto ou relativo do arquivo com o qual você está tentando trabalhar.
Geralmente, usamos um caminho relativo, que indica onde o arquivo está localizado em relação ao local do script (arquivo Python) que está chamando o open()
função.
Por exemplo, o caminho nesta função chama:
open("names.txt") # The relative path is "names.txt"
Contém apenas o nome do arquivo. Isso pode ser usado quando o arquivo que você está tentando abrir estiver no mesmo diretório ou pasta que o script Python, assim:

Mas se o arquivo estiver em uma pasta aninhada, assim:

Então, precisamos usar um caminho específico para informar à função que o arquivo está em outra pasta.
Neste exemplo, este seria o caminho:
open("data/names.txt")
Observe que estamos escrevendo data/
primeiro (o nome da pasta seguido por um /
) e depois names.txt
(o nome do arquivo com a extensão).
💡 Gorjeta: As três letras .txt
que seguem o ponto names.txt
são chamados de “extensão” do arquivo, seu tipo. Nesse caso, .txt
indica que é um arquivo de texto.
Segundo Parâmetro: Modo
O segundo parâmetro do open()
função é a mode
, uma sequência com um caractere. Esse caractere único basicamente diz ao Python o que você está planejando fazer com o arquivo em seu programa.
Os modos disponíveis são:
- Ler (
"r"
) - Anexar (
"a"
) - Escreva (
"w"
) - Crio (
"x"
)
Você também pode optar por abrir o arquivo em:
- Modo de texto (
"t"
) - Modo binário (
"b"
)
Para usar o modo texto ou binário, você precisará adicionar esses caracteres ao modo principal. Por exemplo: "wb"
significa escrever no modo binário.
💡 Gorjeta: Os modos padrão são lidos ("r"
) e texto ("t"
), que significa “aberto para leitura de texto” ("rt"
), para que você não precise especificá-los em open()
se você quiser usá-los porque eles são atribuídos por padrão. Você pode simplesmente escrever open(
.
Por que modos?
Realmente faz sentido para o Python conceder apenas certas permissões com base no que você planeja fazer com o arquivo, certo? Por que o Python deve permitir que seu programa faça mais do que o necessário? É basicamente por isso que existem modos.
Pense nisso … permitir que um programa faça mais do que o necessário pode ser problemático. Por exemplo, se você precisar apenas ler o conteúdo de um arquivo, pode ser perigoso permitir que seu programa o modifique inesperadamente, o que pode potencialmente introduzir bugs.
Como ler um arquivo
Agora que você sabe mais sobre os argumentos de que o open()
função leva, vamos ver como você pode abrir um arquivo e armazená-lo em uma variável para usá-lo em seu programa.
Esta é a sintaxe básica:

Estamos simplesmente atribuindo o valor retornado a uma variável. Por exemplo:
names_file = open("data/names.txt", "r")
Eu sei que você deve estar se perguntando: que tipo de valor é retornado por open()
?
Bem… uma objeto de arquivo.
Vamos falar um pouco sobre eles.
Objetos de arquivo
De acordo com Documentação Python, uma objeto de arquivo é:
Um objeto que expõe uma API orientada a arquivos (com métodos como read () ou write ()) para um recurso subjacente.
Basicamente, isso nos diz que um objeto de arquivo é um objeto que nos permite trabalhar e interagir com arquivos existentes em nosso programa Python.
Os objetos de arquivo têm atributos, como:
- nome: o nome do arquivo.
- fechadas:
True
se o arquivo estiver fechado.False
de outra forma. - modo: o modo usado para abrir o arquivo.

Por exemplo:
f = open("data/names.txt", "a")
print(f.mode) # Output: "a"
Agora vamos ver como você pode acessar o conteúdo de um arquivo através de um objeto de arquivo.
Métodos para ler um arquivo
Para podermos trabalhar com objetos de arquivo, precisamos ter uma maneira de “interagir” com eles em nosso programa e é exatamente isso que os métodos fazem. Vamos ver alguns deles.
Ler()
O primeiro método que você precisa aprender é read()
, qual retorna todo o conteúdo do arquivo como uma sequência.

Aqui temos um exemplo:
f = open("data/names.txt")
print(f.read())
A saída é:
Nora
Gino
Timmy
William
Você pode usar o type()
para confirmar que o valor retornado por f.read()
é uma string:
print(type(f.read()))
# Output
Sim, é uma corda!
Nesse caso, o arquivo inteiro foi impresso porque não especificamos um número máximo de bytes, mas também podemos fazer isso.
Aqui temos um exemplo:
f = open("data/names.txt")
print(f.read(3))
O valor retornado é limitado a este número de bytes:
Nor
📌 Importante: Você precisa Fechar um arquivo após a conclusão da tarefa para liberar os recursos associados ao arquivo. Para fazer isso, você precisa chamar o close()
método, como este:

Readline () vs. Readlines ()
Você pode ler um arquivo linha por linha com esses dois métodos. Eles são um pouco diferentes, então vamos vê-los em detalhes.
readline()
lê uma linha do arquivo até atingir o final dessa linha. Um caractere de nova linha à direita (n
) é mantido na string.
💡 Gorjeta: Opcionalmente, você pode passar o tamanho, o número máximo de caracteres que deseja incluir na sequência resultante.

Por exemplo:
f = open("data/names.txt")
print(f.readline())
f.close()
A saída é:
Nora
Esta é a primeira linha do arquivo.
Em contraste, readlines()
retorna um lista com todas as linhas do arquivo como elementos individuais (strings). Esta é a sintaxe:

Por exemplo:
f = open("data/names.txt")
print(f.readlines())
f.close()
A saída é:
['Noran', 'Ginon', 'Timmyn', 'William']
Observe que existe um n
(caractere de nova linha) no final de cada sequência, exceto a última.
💡 Gorjeta: Você pode obter a mesma lista com list(f)
.
Você pode trabalhar com esta lista em seu programa atribuindo-a a uma variável ou usando-a em um loop:
f = open("data/names.txt")
for line in f.readlines():
# Do something with each line
f.close()
Também podemos iterar f
diretamente (o objeto de arquivo) em um loop:
f = open("data/names.txt", "r")
for line in f:
# Do something with each line
f.close()
Esses são os principais métodos usados para ler objetos de arquivo. Agora vamos ver como você pode criar arquivos.
Como criar um arquivo
Se você precisar criar um arquivo “dinamicamente” usando Python, poderá fazê-lo com o "x"
modo.
Vamos ver como. Esta é a sintaxe básica:

Aqui está um exemplo. Este é o meu diretório de trabalho atual:

Se eu executar esta linha de código:
f = open("new_file.txt", "x")
Um novo arquivo com esse nome é criado:

Com esse modo, você pode criar um arquivo e gravá-lo dinamicamente usando métodos que você aprenderá em apenas alguns momentos.
💡 Gorjeta: O arquivo ficará inicialmente vazio até você modificá-lo.
O curioso é que, se você tentar executar esta linha novamente e um arquivo com esse nome já existir, verá este erro:
Traceback (most recent call last):
File "", line 8, in
f = open("new_file.txt", "x")
FileExistsError: [Errno 17] File exists: 'new_file.txt'
De acordo com Documentação Python, esta exceção (erro de tempo de execução) é:
Gerado ao tentar criar um arquivo ou diretório que já existe.
Agora que você sabe como criar um arquivo, vamos ver como você pode modificá-lo.
Como modificar um arquivo
Para modificar (gravar em) um arquivo, você precisa usar o write()
método. Você tem duas maneiras de fazer isso (anexar ou gravar) com base no modo com o qual você escolhe abri-lo. Vamos vê-los em detalhes.
Acrescentar
“Anexar” significa adicionar algo ao final de outra coisa. o "a"
O modo permite abrir um arquivo para anexar algum conteúdo a ele.
Por exemplo, se tivermos este arquivo:

E queremos adicionar uma nova linha, podemos abri-la usando o "a"
modo (anexar) e, em seguida, chame o write()
, passando o conteúdo que queremos acrescentar como argumento.
Essa é a sintaxe básica para chamar o write()
método:

Aqui está um exemplo:
f = open("data/names.txt", "a")
f.write("nNew Line")
f.close()
💡 Gorjeta: Observe que estou adicionando n
antes da linha para indicar que eu quero que a nova linha apareça como uma linha separada, não como uma continuação da linha existente.
Este é o arquivo agora, depois de executar o script:

💡 Gorjeta: A nova linha pode não ser exibida no arquivo até f.close()
corre.
Escreva
Às vezes, convém excluir o conteúdo de um arquivo e substituí-lo totalmente por um novo conteúdo. Você pode fazer isso com o write()
método se você abrir o arquivo com o "w"
modo.
Aqui temos este arquivo de texto:

Se eu executar este script:
f = open("data/names.txt", "w")
f.write("New Content")
f.close()
Este é o resultado:

Como você pode ver, abrir um arquivo com o "w"
modo e, em seguida, escrever nele substitui o conteúdo existente.
💡 Gorjeta: o write()
O método retorna o número de caracteres gravados.
Se você deseja escrever várias linhas ao mesmo tempo, pode usar o writelines()
método, que leva uma lista de seqüências de caracteres. Cada sequência representa uma linha a ser adicionada ao arquivo.
Aqui está um exemplo. Este é o arquivo inicial:

Se executarmos este script:
f = open("data/names.txt", "a")
f.writelines(["nline1", "nline2", "nline3"])
f.close()
As linhas são adicionadas ao final do arquivo:

Abrir arquivo para várias operações
Agora você sabe como criar, ler e gravar em um arquivo, mas e se você quiser fazer mais de uma coisa no mesmo programa? Vamos ver o que acontece se tentarmos fazer isso com os modos que você aprendeu até agora:
Se você abrir um arquivo no "r"
modo (leitura) e tente gravar nele:
f = open("data/names.txt")
f.write("New Content") # Trying to write
f.close()
Você receberá este erro:
Traceback (most recent call last):
File "", line 9, in
f.write("New Content")
io.UnsupportedOperation: not writable
Da mesma forma, se você abrir um arquivo no "w"
modo (gravação) e tente lê-lo:
f = open("data/names.txt", "w")
print(f.readlines()) # Trying to read
f.write("New Content")
f.close()
Você verá este erro:
Traceback (most recent call last):
File "", line 14, in
print(f.readlines())
io.UnsupportedOperation: not readable
O mesmo ocorrerá com o "a"
modo (anexar).
Como podemos resolver isso? Para poder ler um arquivo e executar outra operação no mesmo programa, você precisa adicionar o "+"
símbolo para o modo, assim:
f = open("data/names.txt", "w+") # Read + Write
f = open("data/names.txt", "a+") # Read + Append
f = open("data/names.txt", "r+") # Read + Write
Muito útil, certo? Provavelmente é isso que você usará em seus programas, mas inclua apenas os modos necessários para evitar possíveis erros.
Às vezes, os arquivos não são mais necessários. Vamos ver como você pode excluir arquivos usando o Python.
Como excluir arquivos
Para remover um arquivo usando Python, você precisa importar um módulo chamado os
que contém funções que interagem com seu sistema operacional.
💡 Gorjeta: UMA módulo é um arquivo Python com variáveis, funções e classes relacionadas.
Particularmente, você precisa do remove()
função. Esta função pega o caminho para o arquivo como argumento e exclui o arquivo automaticamente.

Vamos ver um exemplo. Queremos remover o arquivo chamado sample_file.txt
.

Para isso, escrevemos este código:
import os
os.remove("sample_file.txt")
- A primeira linha:
import os
é chamado de “declaração de importação”. Esta declaração está escrita na parte superior do seu arquivo e fornece acesso às funções definidas noos
módulo. - A segunda linha:
os.remove("sample_file.txt")
remove o arquivo especificado.
💡 Gorjeta: você pode usar um caminho absoluto ou relativo.
Agora que você sabe como excluir arquivos, vamos ver uma ferramenta interessante … Gerentes de Contexto!
Conheça gerentes de contexto
Os gerentes de contexto são construções em Python que facilitarão sua vida. Ao usá-los, você não precisa se lembrar de fechar um arquivo no final do seu programa e terá acesso ao arquivo na parte específica do programa que escolher.
Sintaxe
Este é um exemplo de um gerenciador de contexto usado para trabalhar com arquivos:

💡 Gorjeta: O corpo do gerenciador de contexto deve ser recuado, assim como recuamos loops, funções e classes. Se o código não for recuado, ele não será considerado parte do gerenciador de contexto.
Quando o corpo do gerenciador de contexto for concluído, o arquivo será fechado automaticamente.
with open("", "") as :
# Working with the file...
# The file is closed here!
Exemplo
Aqui está um exemplo:
with open("data/names.txt", "r+") as f:
print(f.readlines())
Este gerenciador de contexto abre o names.txt
arquivo para operações de leitura / gravação e atribui esse objeto de arquivo à variável f
. Essa variável é usada no corpo do gerenciador de contexto para se referir ao objeto de arquivo.
Tentando ler novamente
Após a conclusão do corpo, o arquivo é fechado automaticamente, portanto não pode ser lido sem abri-lo novamente. Mas espere! Temos uma linha que tenta lê-lo novamente, bem aqui abaixo:
with open("data/names.txt", "r+") as f:
print(f.readlines())
print(f.readlines()) # Trying to read the file again, outside of the context manager
Vamos ver o que acontece:
Traceback (most recent call last):
File "", line 21, in
print(f.readlines())
ValueError: I/O operation on closed file.
Este erro foi lançado porque estamos tentando ler um arquivo fechado. Impressionante, certo? O gerenciador de contexto faz todo o trabalho pesado para nós, é legível e conciso.
Como lidar com exceções ao trabalhar com arquivos
Quando você está trabalhando com arquivos, podem ocorrer erros. Às vezes, você pode não ter as permissões necessárias para modificar ou acessar um arquivo, ou um arquivo pode nem existir. Como programador, você precisa prever essas circunstâncias e lidar com elas em seu programa para evitar falhas repentinas que podem afetar definitivamente a experiência do usuário.
Vamos ver algumas das exceções mais comuns (erros de tempo de execução) que você pode encontrar ao trabalhar com arquivos:
FileNotFoundError
De acordo com Documentação Python, essa exceção é:
Gerado quando um arquivo ou diretório é solicitado, mas não existe.
Por exemplo, se o arquivo que você está tentando abrir não existir no seu diretório de trabalho atual:
f = open("names.txt")
Você verá este erro:
Traceback (most recent call last):
File "", line 8, in
f = open("names.txt")
FileNotFoundError: [Errno 2] No such file or directory: 'names.txt'
Vamos dividir esse erro nesta linha por linha:
File "
. Essa linha informa que o erro foi gerado quando o código no arquivo localizado em", line 8, in
Estava correndo. Especificamente, quandoline 8
foi executado em
.f = open("names.txt")
. Esta é a linha que causou o erro.FileNotFoundError: [Errno 2] No such file or directory: 'names.txt'
. Esta linha diz que umFileNotFoundError
exceção foi gerada porque o arquivo ou diretórionames.txt
não existe.
💡 Gorjeta: Python é muito descritivo com as mensagens de erro, certo? Essa é uma grande vantagem durante o processo de depuração.
PermissionError
Essa é outra exceção comum ao trabalhar com arquivos. De acordo com Documentação Python, essa exceção é:
Gerado ao tentar executar uma operação sem os direitos de acesso adequados – por exemplo, permissões do sistema de arquivos.
Essa exceção é gerada quando você está tentando ler ou modificar um arquivo que não tem permissão para acessar. Se você tentar fazer isso, verá este erro:
Traceback (most recent call last):
File "", line 8, in
f = open("")
PermissionError: [Errno 13] Permission denied: 'data'
IsADirectoryError
De acordo com Documentação Python, essa exceção é:
Gerado quando uma operação de arquivo é solicitada em um diretório.
Essa exceção específica é gerada quando você tenta abrir ou trabalhar em um diretório em vez de em um arquivo; portanto, tenha muito cuidado com o caminho que você passa como argumento.
Como lidar com exceções
Para lidar com essas exceções, você pode usar um tente / exceto declaração. Com essa declaração, você pode “dizer” ao seu programa o que fazer caso algo inesperado aconteça.
Esta é a sintaxe básica:
try:
# Try to run this code
except :
# If an exception of this type is raised, stop the process and jump to this block
Aqui você pode ver um exemplo com FileNotFoundError
:
try:
f = open("names.txt")
except FileNotFoundError:
print("The file doesn't exist")
Isso basicamente diz:
- Tente abrir o arquivo
names.txt
. - Se um
FileNotFoundError
é jogado, não bata! Simplesmente imprima uma declaração descritiva para o usuário.
💡 Gorjeta: Você pode escolher como lidar com a situação escrevendo o código apropriado no except
quadra. Talvez você possa criar um novo arquivo se ele já não existir.
Para fechar o arquivo automaticamente após a tarefa (independentemente de uma exceção ter sido gerada ou não no diretório try
bloco), você pode adicionar o finally
quadra.
try:
# Try to run this code
except :
# If this exception is raised, stop the process immediately and jump to this block
finally:
# Do this after running the code, even if an exception was raised
Isto é um exemplo:
try:
f = open("names.txt")
except FileNotFoundError:
print("The file doesn't exist")
finally:
f.close()
Existem várias maneiras de personalizar a instrução try / except / finalmente e você pode até adicionar um else
para executar um bloco de código somente se nenhuma exceção tiver sido gerada no try
quadra.
💡 Gorjeta: Para saber mais sobre o tratamento de exceções no Python, você pode ler meu artigo: “Como lidar com exceções no Python: uma introdução visual detalhada”.
Em suma
- Você pode criar, ler, escrever e excluir arquivos usando o Python.
- Os objetos de arquivo têm seu próprio conjunto de métodos que você pode usar para trabalhar com eles em seu programa.
- Os gerentes de contexto ajudam você a trabalhar com arquivos e a gerenciá-los, fechando-os automaticamente quando uma tarefa é concluída.
- O tratamento de exceções é fundamental no Python. Exceções comuns ao trabalhar com arquivos incluem FileNotFoundError, PermissionError e IsADirectoryError. Eles podem ser manipulados usando try / except / else / finalmente.
Eu realmente espero que você tenha gostado do meu artigo e tenha sido útil. Agora você pode trabalhar com arquivos em seus projetos Python. Confira meus cursos on-line. Siga-me no Twitter. 👍