Python Data Persistence - File API
Python usa input() e print()funções para realizar operações de entrada / saída padrão. A função input () lê bytes de um dispositivo de fluxo de entrada padrão, ou seja, teclado.
o print()por outro lado, envia os dados para o dispositivo de fluxo de saída padrão, ou seja, o monitor de exibição. O programa Python interage com esses dispositivos IO por meio de objetos de fluxo padrãostdin e stdout definido no módulo sys.
o input()na verdade, a função é um wrapper em torno do método readline () do objeto sys.stdin. Todas as teclas do fluxo de entrada são recebidas até que a tecla 'Enter' seja pressionada.
>>> import sys
>>> x=sys.stdin.readline()
Welcome to TutorialsPoint
>>> x
'Welcome to TutorialsPoint\n'
Observe que, readline()função deixa um caractere '\ n' à direita. Há também um método read () que lê os dados do fluxo de entrada padrão até que seja encerrado porCtrl+D personagem.
>>> x=sys.stdin.read()
Hello
Welcome to TutorialsPoint
>>> x
'Hello\nWelcome to TutorialsPoint\n'
Similarmente, print() é uma função de conveniência que emula o método write () do objeto stdout.
>>> x='Welcome to TutorialsPoint\n'
>>> sys.stdout.write(x)
Welcome to TutorialsPoint
26
Assim como os objetos de fluxo predefinidos stdin e stdout, um programa Python pode ler e enviar dados para um arquivo de disco ou soquete de rede. Eles também são riachos. Qualquer objeto que possui o método read () é um fluxo de entrada. Qualquer objeto que possui o método write () é um fluxo de saída. A comunicação com o stream é estabelecida pela obtenção de referência ao objeto stream com a função open () embutida.
função open ()
Esta função integrada usa os seguintes argumentos -
f=open(name, mode, buffering)
O parâmetro name, é o nome do arquivo de disco ou string de byte, mode é uma string opcional de um caractere para especificar o tipo de operação a ser realizada (ler, escrever, anexar etc.) e o parâmetro de buffer é 0, 1 ou -1 indicando o buffer está desativado, ativado ou o padrão do sistema.
O modo de abertura de arquivo é enumerado de acordo com a tabela abaixo. O modo padrão é 'r'
Sr. Não | Parâmetros e descrição |
---|---|
1 | R Aberto para leitura (padrão) |
2 | W Abra para gravação, truncando o arquivo primeiro |
3 | X Crie um novo arquivo e abra-o para gravação |
4 | A Abra para gravação, anexando ao final do arquivo se ele existir |
5 | B Modo binário |
6 | T Modo de texto (padrão) |
7 | + Abra um arquivo de disco para atualização (leitura e gravação) |
Para salvar os dados no arquivo, ele deve ser aberto no modo 'w'.
f=open('test.txt','w')
Este objeto de arquivo atua como um fluxo de saída e tem acesso ao método write (). O método write () envia uma string para este objeto e é armazenado no arquivo subjacente a ele.
string="Hello TutorialsPoint\n"
f.write(string)
É importante fechar o fluxo, para garantir que todos os dados restantes no buffer sejam completamente transferidos para ele.
file.close()
Tente e abra 'test.txt' usando qualquer editor de teste (como o bloco de notas) para confirmar a criação bem-sucedida do arquivo.
Para ler o conteúdo de 'test.txt' programaticamente, ele deve ser aberto no modo 'r'.
f=open('test.txt','r')
Este objeto se comporta como um fluxo de entrada. Python pode buscar dados do fluxo usandoread() método.
string=f.read()
print (string)
O conteúdo do arquivo é exibido no console Python. O objeto File também suportareadline() método que é capaz de ler string até encontrar o caractere EOF.
No entanto, se o mesmo arquivo for aberto no modo 'w' para armazenar texto adicional, o conteúdo anterior será apagado. Sempre que um arquivo é aberto com permissão de gravação, ele é tratado como se fosse um novo arquivo. Para adicionar dados a um arquivo existente, use 'a' para o modo anexar.
f=open('test.txt','a')
f.write('Python Tutorials\n')
O arquivo agora tem uma string anterior e outra recém-adicionada. O objeto de arquivo também suportawritelines() método para gravar cada string em um objeto de lista no arquivo.
f=open('test.txt','a')
lines=['Java Tutorials\n', 'DBMS tutorials\n', 'Mobile development tutorials\n']
f.writelines(lines)
f.close()
Exemplo
o readlines()método retorna uma lista de strings, cada uma representando uma linha no arquivo. Também é possível ler o arquivo linha por linha até que o final do arquivo seja alcançado.
f=open('test.txt','r')
while True:
line=f.readline()
if line=='' : break
print (line, end='')
f.close()
Resultado
Hello TutorialsPoint
Python Tutorials
Java Tutorials
DBMS tutorials
Mobile development tutorials
Modo binário
Por padrão, as operações de leitura / gravação em um objeto de arquivo são realizadas em dados de string de texto. Se quisermos lidar com arquivos de outros tipos diferentes, como mídia (mp3), executáveis (exe), imagens (jpg) etc., precisamos adicionar o prefixo 'b' ao modo de leitura / gravação.
A instrução a seguir converterá uma string em bytes e gravará em um arquivo.
f=open('test.bin', 'wb')
data=b"Hello World"
f.write(data)
f.close()
A conversão de string de texto em bytes também é possível usando a função encode ().
data="Hello World".encode('utf-8')
Precisamos usar ‘rb’modo para ler o arquivo binário. O valor retornado do método read () é primeiro decodificado antes da impressão.
f=open('test.bin', 'rb')
data=f.read()
print (data.decode(encoding='utf-8'))
Para gravar dados inteiros em um arquivo binário, o objeto inteiro deve ser convertido em bytes por to_bytes() método.
n=25
n.to_bytes(8,'big')
f=open('test.bin', 'wb')
data=n.to_bytes(8,'big')
f.write(data)
Para ler de volta de um arquivo binário, converta a saída da função read () em um inteiro pela função from_bytes ().
f=open('test.bin', 'rb')
data=f.read()
n=int.from_bytes(data, 'big')
print (n)
Para dados de ponto flutuante, precisamos usar struct módulo da biblioteca padrão do Python.
import struct
x=23.50
data=struct.pack('f',x)
f=open('test.bin', 'wb')
f.write(data)
Descompactando a string da função read (), para recuperar os dados flutuantes do arquivo binário.
f=open('test.bin', 'rb')
data=f.read()
x=struct.unpack('f', data)
print (x)
Leitura / gravação simultânea
Quando um arquivo é aberto para escrita (com 'w' ou 'a'), não é possível lê-lo e vice-versa. Fazer isso gera um erro UnSupportedOperation. Precisamos fechar o arquivo antes de fazer outra operação.
Para realizar ambas as operações simultaneamente, temos que adicionar o caractere '+' no parâmetro de modo. Portanto, o modo 'w +' ou 'r +' habilita o uso dos métodos write () e read () sem fechar um arquivo. O objeto File também oferece suporte à função seek () para retroceder o fluxo para qualquer posição de byte desejada.
f=open('test.txt','w+')
f.write('Hello world')
f.seek(0,0)
data=f.read()
print (data)
f.close()
A tabela a seguir resume todos os métodos disponíveis para um arquivo como objeto.
Sr. Não | Método e Descrição |
---|---|
1 | close() Fecha o arquivo. Um arquivo fechado não pode mais ser lido ou gravado. |
2 | flush() Limpe o buffer interno. |
3 | fileno() Retorna o descritor de arquivo inteiro. |
4 | next() Retorna a próxima linha do arquivo cada vez que é chamado. Use o iterador next () no Python 3. |
5 | read([size]) Lê no máximo bytes de tamanho do arquivo (menos se a leitura atingir EOF antes de obter bytes de tamanho). |
6 | readline([size]) Lê uma linha inteira do arquivo. Um caractere de nova linha final é mantido na string. |
7 | readlines([sizehint]) Lê até EOF usando readline () e retorna uma lista contendo as linhas. |
8 | seek(offset[, whence]) Define a posição atual do arquivo. 0-início 1-corrente 2-fim. |
9 | seek(offset[, whence]) Define a posição atual do arquivo. 0-início 1-corrente 2-fim. |
10 | tell() Retorna a posição atual do arquivo |
11 | truncate([size]) Trunca o tamanho do arquivo. |
12 | write(str) Grava uma string no arquivo. Não há reembolso. |