Python io – BytesIO, StringIO

Python io módulo permite-nos gerir as operações de entrada e saída relacionadas com ficheiros. A vantagem de utilizar o módulo IO é que as classes e funções disponíveis permitem-nos alargar a funcionalidade para permitir a escrita aos dados Unicode.

Python IO Module

Existem muitas maneiras de utilizar o módulo io para realizar operações de fluxo e buffer em Python. Demonstraremos aqui muitos exemplos para provar este ponto. Vamos começar.

Python BytesIO

Apenas como o que fazemos com as variáveis, os dados podem ser mantidos como bytes num buffer in-memory quando utilizamos as operações IO de Byte do módulo io.

Aqui está um programa de amostra para demonstrar isto:

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

Vejamos a saída para este programa:
python IO BytesIO exemplobr>The getvalue() function just takes the value from the Buffer as a String.

Python StringIO

Podemos até usar StringIO também o que é extremamente semelhante em uso a BytesIO. Eis uma amostra de programa:

import iodata = io.StringIO()data.write('JournalDev: ')print('Python.', file=data)print(data.getvalue())data.close()

Vejamos a saída para este programa:
python StringIO exemplobr>Notificação de que até fechámos o tampão depois de termos terminado com o tampão. Isto ajuda a guardar a memória intermédia à medida que armazenam os dados na memória.

Também utilizámos o método de impressão com um argumento opcional para especificar um fluxo IO da variável, que é perfeitamente compatível com uma declaração de impressão.

Leitura usando StringIO

Após escrevermos alguns dados no buffer StringIO, podemos lê-los também. Vejamos um trecho de código:

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

Vejamos a saída para este programa:
python io module read stringIO data

Reading file using StringIO

É também possível ler um ficheiro e transmiti-lo através de uma rede como Bytes. O módulo io pode ser utilizado para converter um ficheiro multimédia como uma imagem a ser convertida em bytes. Aqui está um programa de exemplo:

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

Vejamos a saída para este programa:
br>Para este programa ser executado, tínhamos uma imagem whale.png presente no nosso directório actual.

io.open() vs os.open()

A função io.open() é uma forma muito preferida de executar operações I/O, uma vez que é feita como interface de alto nível para peformar ficheiros I/O. Envolve o descritor de ficheiro a nível de SO num objecto que podemos utilizar para aceder ao ficheiro de uma forma pitónica.

A função os.open() cuida da chamada do sistema POSIX de nível inferior. Toma os argumentos baseados no POSIX e devolve um descritor de ficheiro que representa o ficheiro aberto. Não retorna um objecto de ficheiro; o valor retornado não terá read() ou write() functions.

Overall, io.open() function is just a wrapper over os.open() function. A função os.open() também define a configuração por defeito como bandeiras e modo, enquanto io.open() não o faz e depende dos valores que lhe são passados.

Conclusion

Nesta lição, estudámos operações simples do módulo python IO e como podemos gerir os caracteres Unicode também com BytesIO. Contudo, se estiver à procura de operações completas de arquivo como apagar e copiar um arquivo, então leia python read file.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *