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