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 habilitar a escrita de dados Unicode.

Módulo IO do Python

Há muitas maneiras pelas quais podemos 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.

BytesIO do Python

Assim como fazemos com variáveis, os dados podem ser mantidos como bytes em um buffer na memória quando usamos as operações de E/S de bytes 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 para este programa: A função getvalue() simplesmente obtém o valor do buffer como uma string.

StringIO do Python

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: Note que mesmo fechamos o buffer depois de terminarmos com ele. Isso ajuda a economizar memória do buffer, pois eles armazenam dados na memória. Além disso, usamos o método print com um argumento opcional para especificar um fluxo de E/S 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 por uma rede como Bytes. O módulo io pode ser usado para converter um arquivo de mídia como uma imagem para 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 io.open() é uma maneira muito preferida de realizar operações de I/O, pois é feito como uma interface de alto nível para realizar I/O de arquivos. Ele envolve o descritor de arquivo do nível do sistema operacional em um objeto que podemos usar para acessar o arquivo de forma Pythonica. A função os.open() cuida da chamada de 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á 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: Documentação da API

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