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.