Python io – BytesIO, StringIO

O módulo io do Python nos permite gerenciar as operações de entrada e saída relacionadas a arquivos. A vantagem de usar o módulo IO é que as classes e funções disponíveis nos permitem estender a funcionalidade para possibilitar a escrita de dados Unicode.

Módulo IO do Python

Há muitas maneiras de usar o módulo io para realizar operações de fluxo e buffer em Python. Demonstraremos muitos exemplos aqui para comprovar o ponto. Vamos começar.

Python BytesIO

Assim como fazemos com variáveis, os dados podem ser mantidos como bytes em um buffer na memória quando usamos as operações Byte IO do módulo io. Aqui está um programa de exemplo para demonstrar isso:

import io

stream_str = io.BytesIO(b"JournalDev Python: \x00\x01")
print(stream_str.getvalue())

Vamos ver a saída deste programa: A função getvalue() apenas obtém o valor do buffer como uma string.

Python StringIO

Também podemos usar StringIO que é extremamente semelhante ao uso de BytesIO. Aqui está um programa de exemplo:

import io

data = io.StringIO()
data.write('JournalDev: ')
print('Python.', file=data)

print(data.getvalue())

data.close()

Vamos ver a saída para este programa: Observe que até fechamos o buffer após terminarmos com ele. Isso ajuda a economizar memória de buffer, já que eles armazenam dados na memória. Além disso, utilizamos o método print com um argumento opcional para especificar um fluxo de entrada/saída da variável, o que é perfeitamente compatível com uma instrução de impressão.

Lendo usando StringIO

Depois de escrevermos alguns dados no buffer StringIO, também podemos lê-los. Vamos dar uma olhada em um trecho de código:

import io

input = io.StringIO('This goes into the read buffer.')
print(input.read())

Vamos ver a saída para este programa:

Lendo arquivo usando StringIO

Também é possível ler um arquivo e transmiti-lo pela rede como Bytes. O módulo io pode ser usado para converter um arquivo de mídia, como uma imagem, em bytes. Aqui está um programa de exemplo:

import io

file = io.open("whale.png", "rb", buffering = 0)
print(file.read())

Vamos ver a saída para este programa: Para que este programa seja executado, tínhamos uma imagem whale.png presente em nosso diretório atual.

io.open() vs os.open()

O função io.open() é uma maneira muito preferida de realizar operações de E/S, pois é feita como uma interface de alto nível para realizar E/S de arquivos. Ela envolve o descritor de arquivo do nível do sistema operacional em um objeto que podemos usar para acessar o arquivo de uma maneira pythonica. A função os.open() cuida da chamada do sistema POSIX de nível mais baixo. Ela recebe argumentos baseados em POSIX e retorna um descritor de arquivo que representa o arquivo aberto. Não retorna um objeto de arquivo; o valor retornado não terá as funções read() ou write(). No geral, a função io.open() é apenas um invólucro sobre a função os.open(). A função os.open() também define a configuração padrão como sinalizadores e modo, enquanto io.open() não o faz e depende dos valores passados para ela.

Conclusão

Nesta lição, estudamos as operações simples do módulo IO do Python e como podemos gerenciar os caracteres Unicode com BytesIO também. No entanto, se você estiver procurando por operações de arquivo completas, como excluir e copiar um arquivo, então leia python ler arquivo. Referência: API Doc

Source:
https://www.digitalocean.com/community/tutorials/python-io-bytesio-stringio