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