Python I/O de Arquivos: Dominando Operações de Entrada e Saída
Este capítulo abrange todas as funções básicas de I/O disponíveis em Python. Para mais funções, consulte a documentação padrão do Python.
Imprimindo na Tela
A maneira mais simples de produzir saída é usando a instrução print, onde você pode passar zero ou mais expressões separadas por vírgulas. Esta função converte as expressões que você passa em uma string e escreve o resultado na saída padrão:
#!/usr/bin/python
print("Python is really a great language,", "isn't it?")
Isso produz o seguinte resultado na sua tela padrão:
Python is really a great language, isn't it?
Lendo Entrada do Teclado
O Python fornece duas funções embutidas para ler uma linha de texto da entrada padrão, que por padrão vem do teclado. Essas funções são:
raw_input(Python 2)input
A Função raw_input (Python 2)
A função raw_input([prompt]) lê uma linha da entrada padrão e a retorna como uma string (removendo a nova linha final).
#!/usr/bin/python
str = raw_input("Enter your input: ")
print("Received input is :", str)
Isso solicita que você insira qualquer string e exibe a mesma string na tela. Quando digitei "Hello Python!", a saída é assim:
Enter your input: Hello Python
Received input is : Hello Python
A Função input
A função input([prompt]) é equivalente a raw_input, exceto que assume que a entrada é uma expressão Python válida e retorna o resultado avaliado.
#!/usr/bin/python
str = input("Enter your input: ")
print("Received input is :", str)
Isso produziria o seguinte resultado contra a entrada inserida:
Enter your input: [x*5 for x in range(2,10,2)]
Recieved input is : [10, 20, 30, 40]
Abrindo e Fechando Arquivos
Até agora, você tem lido e escrito na entrada e saída padrão. Agora, veremos como usar arquivos de dados reais.
O Python fornece funções e métodos básicos necessários para manipular arquivos por padrão. Você pode fazer a maior parte da manipulação de arquivos usando um objeto file.
A Função open
Antes de poder ler ou escrever um arquivo, você deve abri-lo usando a função embutida open() do Python. Esta função cria um objeto file, que será utilizado para chamar outros métodos de suporte associados a ele.
Sintaxe
objeto_arquivo = open(nome_arquivo [, modo_acesso][, buffering])
Detalhes dos parâmetros:
nome_arquivo - O argumento nome_arquivo é um valor string que contém o nome do arquivo que você deseja acessar.
modo_acesso - O modo_acesso determina o modo em que o arquivo deve ser aberto, ou seja, leitura, escrita, anexação, etc. Uma lista completa de valores possíveis é dada na tabela abaixo. Este é um parâmetro opcional e o modo de acesso padrão é leitura (r).
buffering - Se o valor de buffering for 0, nenhum buffering ocorre. Se for 1, buffering de linha é realizado ao acessar um arquivo. Se você especificar um inteiro maior que 1, a ação de buffering é realizada com o tamanho de buffer indicado. Se negativo, o tamanho do buffer é o padrão do sistema (comportamento padrão).
Aqui está uma lista dos diferentes modos de abertura de um arquivo:
| Nº | Modos e Descrição |
|---|---|
| 1 | r Abre um arquivo somente para leitura. O ponteiro do arquivo é colocado no início do arquivo. Este é o modo padrão. |
| 2 | rb Abre um arquivo somente para leitura no formato binário. O ponteiro do arquivo é colocado no início do arquivo. Este é o modo padrão. |
| 3 | r+ Abre um arquivo para leitura e escrita. O ponteiro do arquivo é colocado no início do arquivo. |
| 4 | rb+ Abre um arquivo para leitura e escrita no formato binário. O ponteiro do arquivo é colocado no início do arquivo. |
| 5 | w Abre um arquivo somente para escrita. Sobrescreve o arquivo se ele existir. Se o arquivo não existir, cria um novo arquivo para escrita. |
| 6 | wb Abre um arquivo somente para escrita no formato binário. Sobrescreve o arquivo se ele existir. Se o arquivo não existir, cria um novo arquivo para escrita. |
| 7 | w+ Abre um arquivo para escrita e leitura. Sobrescreve o arquivo existente se ele existir. Se o arquivo não existir, cria um novo arquivo para leitura e escrita. |
| 8 | wb+ Abre um arquivo para escrita e leitura no formato binário. Sobrescreve o arquivo existente se ele existir. Se o arquivo não existir, cria um novo arquivo para leitura e escrita. |
| 9 | a Abre um arquivo para anexação. O ponteiro do arquivo está no final do arquivo se ele existir. Ou seja, o arquivo está no modo de anexação. Se o arquivo não existir, cria um novo arquivo para escrita. |
| 10 | ab Abre um arquivo para anexação no formato binário. O ponteiro do arquivo está no final do arquivo se ele existir. Ou seja, o arquivo está no modo de anexação. Se o arquivo não existir, cria um novo arquivo para escrita. |
| 11 | a+ Abre um arquivo para anexação e leitura. O ponteiro do arquivo está no final do arquivo se ele existir. O arquivo abre no modo de anexação. Se o arquivo não existir, cria um novo arquivo para leitura e escrita. |
| 12 | ab+ Abre um arquivo para anexação e leitura no formato binário. O ponteiro do arquivo está no final do arquivo se ele existir. O arquivo abre no modo de anexação. Se o arquivo não existir, cria um novo arquivo para leitura e escrita. |
Atributos do Objeto file
Uma vez que um arquivo é aberto e você tem um objeto file, pode obter várias informações relacionadas a esse arquivo.
Aqui está uma lista de todos os atributos relacionados ao objeto file:
| Nº | Atributo e Descrição |
|---|---|
| 1 | file.closed Retorna true se o arquivo está fechado, false caso contrário. |
| 2 | file.mode Retorna o modo de acesso com que o arquivo foi aberto. |
| 3 | file.name Retorna o nome do arquivo. |
| 4 | file.softspace Retorna false se espaço explicitamente requerido com print, true caso contrário. |
Exemplo
#!/usr/bin/python
# Abre um arquivo
fo = open("foo.txt", "wb")
print("Name of the file: ", fo.name)
print("Closed or not : ", fo.closed)
print("Opening mode : ", fo.mode)
print("Softspace flag : ", fo.softspace)
Isso produz o seguinte resultado:
Name of the file: foo.txt
Closed or not : False
Opening mode : wb
Softspace flag : 0
O Método close()
O método close() de um objeto file descarrega qualquer informação não escrita e fecha o objeto arquivo, após o qual não mais escrita pode ser feita.
O Python fecha automaticamente um arquivo quando o objeto de referência de um arquivo é reatribuído a outro arquivo. É uma boa prática usar o método close() para fechar um arquivo.
Sintaxe
fileObject.close()
Exemplo
#!/usr/bin/python
# Abre um arquivo
fo = open("foo.txt", "wb")
print("Name of the file: ", fo.name)
# Fecha arquivo aberto
fo.close()
Isso produz o seguinte resultado:
Name of the file: foo.txt
Lendo e Escrevendo Arquivos
O objeto file fornece um conjunto de métodos de acesso para facilitar nossa vida. Veremos como usar os métodos read() e write() para ler e escrever arquivos.
O Método write()
O método write() escreve qualquer string em um arquivo aberto. É importante notar que strings Python podem ter dados binários e não apenas texto.
O método write() não adiciona um caractere de nova linha ('\n') ao final da string:
Sintaxe
fileObject.write(string)
Aqui, o parâmetro passado é o conteúdo a ser escrito no arquivo aberto.
Exemplo
#!/usr/bin/python
# Abre um arquivo
fo = open("foo.txt", "wb")
fo.write("Python is a great language.\nYeah its great!!\n")
# Fecha arquivo aberto
fo.close()
O método acima criaria o arquivo foo.txt e escreveria o conteúdo dado nele e finalmente fecharia o arquivo. Se você abrisse este arquivo, ele teria o seguinte conteúdo.
Python is a great language.
Yeah its great!!
O Método read()
O método read() lê uma string de um arquivo aberto. É importante notar que strings Python podem ter dados binários, além de dados de texto.
Sintaxe
fileObject.read([count])
Aqui, o parâmetro passado é o número de bytes a serem lidos do arquivo aberto. Este método começa a ler do início do arquivo e se count estiver faltando, então ele tenta ler o máximo possível, talvez até o final do arquivo.
Exemplo
Vamos pegar um arquivo foo.txt, que criamos acima.
#!/usr/bin/python
# Abre um arquivo
fo = open("foo.txt", "r+")
str = fo.read(10)
print("Read String is : ", str)
# Fecha arquivo aberto
fo.close()
Isso produz o seguinte resultado:
Read String is : Python is
Posições no Arquivo
O método tell() informa a posição atual dentro do arquivo; em outras palavras, a próxima leitura ou escrita ocorrerá naquele número de bytes a partir do início do arquivo.
O método seek(offset[, from]) altera a posição atual do arquivo. O argumento offset indica o número de bytes a serem movidos. O argumento from especifica a posição de referência a partir da qual os bytes devem ser movidos.
Se from for definido como 0, significa usar o início do arquivo como posição de referência e 1 significa usar a posição atual como posição de referência e se for definido como 2, então o final do arquivo seria tomado como posição de referência.
Exemplo
Vamos pegar um arquivo foo.txt, que criamos acima.
#!/usr/bin/python
# Abre um arquivo
fo = open("foo.txt", "r+")
str = fo.read(10)
print("Read String is : ", str)
# Verifica posição atual
position = fo.tell()
print("Current file position : ", position)
# Reposiciona ponteiro no início mais uma vez
position = fo.seek(0, 0)
str = fo.read(10)
print("Again read String is : ", str)
# Fecha arquivo aberto
fo.close()
Isso produz o seguinte resultado:
Read String is : Python is
Current file position : 10
Again read String is : Python is
Renomeando e Excluindo Arquivos
O módulo os do Python fornece métodos que ajudam a realizar operações de processamento de arquivos, como renomear e excluir arquivos.
Para usar este módulo, você precisa importá-lo primeiro e então pode chamar quaisquer funções relacionadas.
O Método rename()
O método rename() recebe dois argumentos: o nome do arquivo atual e o novo nome do arquivo.
Sintaxe
os.rename(nome_arquivo_atual, novo_nome_arquivo)
Exemplo
Segue o exemplo para renomear um arquivo existente test1.txt:
#!/usr/bin/python
import os
# Renomeia um arquivo de test1.txt para test2.txt
os.rename("test1.txt", "test2.txt")
O Método remove()
Você pode usar o método remove() para excluir arquivos fornecendo o nome do arquivo a ser excluído como argumento.
Sintaxe
os.remove(nome_arquivo)
Exemplo
Segue o exemplo para excluir um arquivo existente test2.txt:
#!/usr/bin/python
import os
# Exclui arquivo test2.txt
os.remove("text2.txt")
Diretórios em Python
Todos os arquivos estão contidos dentro de vários diretórios, e o Python não tem problema em lidar com estes também. O módulo os tem vários métodos que ajudam a criar, remover e alterar diretórios.
O Método mkdir()
Você pode usar o método mkdir() do módulo os para criar diretórios no diretório atual. Você precisa fornecer um argumento a este método que contém o nome do diretório a ser criado.
Sintaxe
os.mkdir("novodir")
Exemplo
Segue o exemplo para criar um diretório test no diretório atual:
#!/usr/bin/python
import os
# Cria um diretório "test"
os.mkdir("test")
O Método chdir()
Você pode usar o método chdir() para alterar o diretório atual. O método chdir() recebe um argumento, que é o nome do diretório que você deseja tornar o diretório atual.
Sintaxe
os.chdir("novodir")
Exemplo
Segue o exemplo para entrar no diretório "/home/newdir":
#!/usr/bin/python
import os
# Alterando um diretório para "/home/newdir"
os.chdir("/home/newdir")
O Método getcwd()
O método getcwd() exibe o diretório de trabalho atual.
Sintaxe
os.getcwd()
Exemplo
Segue o exemplo para dar o diretório atual:
#!/usr/bin/python
import os
# Isso daria a localização do diretório atual
os.getcwd()
O Método rmdir()
O método rmdir() exclui o diretório, que é passado como argumento no método.
Antes de remover um diretório, todo o conteúdo nele deve ser removido.
Sintaxe
os.rmdir('nomedir')
Exemplo
Segue o exemplo para remover o diretório "/tmp/test". É necessário dar o nome totalmente qualificado do diretório, caso contrário, ele procuraria por aquele diretório no diretório atual.
#!/usr/bin/python
import os
# Isso removeria o diretório "/tmp/test".
os.rmdir("/tmp/test")
Métodos Relacionados a Arquivos e Diretórios
Existem três fontes importantes, que fornecem uma ampla gama de métodos utilitários para lidar e manipular arquivos e diretórios em sistemas operacionais Windows e Unix. Eles são:
Métodos do Objeto Arquivo: O objeto file fornece funções para manipular arquivos.
Métodos do Objeto OS: Isso fornece métodos para processar arquivos e diretórios.
python
- Dominando Entrada e Saída (I/O) em C: scanf() e printf() Explicados
- Manipulação de Arquivos em C: Dominando I/O com fopen, fprintf, fread e fseek
- Dominando I/O e Importação de Módulos em Python: Guia Prático
- Python File I/O: Dominando Operações de Arquivo, Leitura, Escrita e Gerenciamento
- Dominando Operações com Diretórios e Arquivos em Python
- Verificando Existência de Arquivos e Diretórios em Python – Guia Prático
- Dominando I/O de Arquivos em C: Criando, Abrindo e Gerenciando Arquivos
- Entendendo Arquivos de Cabeçalho em C: Tipos, Uso e Boas Práticas
- Dominando I/O de Arquivos em C++: Leitura e Escrita com fstream
- Dominando I/O de Arquivos em C#: Leitura, Escrita e Gerenciamento de Streams