Python pickle: Como serializar e desserializar objetos
Com Python pickle
, é possível serializar e desserializar objetos. Vários tipos de dados podem ser convertidos, mas, como códigos maliciosos também podem ser armazenados, apenas desserialize arquivos de fontes confiáveis.
O que é o Python pickle
?
O módulo Python pickle
permite que você salve objetos para usá-los em um momento posterior, assim como compartilhá-los ou utilizá-los em outro projeto. Para isso, os objetos são convertidos em um formato que pode ser armazenado, prática chamada de serialização. Da mesma forma, o Python pickle
pode ser usado para desserializar objetos, ou seja, convertê-los de volta ao formato original. Se você pretende usar objetos com mais frequência, o módulo pickle
é uma solução eficiente.
O objeto é convertido em um fluxo de bytes, o que mantém todas as informações inalteradas. Com ele você tem a certeza de que o objeto, ao ser convertido de volta ao formato original, poderá ser reutilizado sem problemas. Além disso, o Python pickle
fornece instruções para uma desserialização bem-sucedida, permitindo que a estrutura original seja reconstruída em detalhes. Usar o Python pickle
economiza tempo, pois objetos criados uma única vez não precisam ser recriados em cada novo uso. O formato de armazenamento mais comum é .pkl.
Quais tipos de dados podem ser convertidos com Python pickle
?
O Python pickle
pode serializar os seguintes tipos de dados:
- Valores booleanos:
true
efalse
, além denone
- Números inteiros e complexos
- Strings (normal e Unicode)
- Listas
- Conjuntos
- Tuplas
- Dicionários
- Funções
- Classes
Quais são os diferentes métodos de Python pickle
?
Para trabalhar com Python pickle
, você pode fazer uso de um destes quatro métodos:
pickle.dump(obj, file, protocol=None, *, fix_imports=True, buffer_callback=None)
: Realiza uma serialização, criando um arquivo com o resultado desejado.pickle.dumps(obj, protocol=None, *, fix_imports=True, buffer_callback=None)
: Também usado para serialização, mas retorna uma string de bytes.pickle.load(file, *, fix_imports=True, encoding='ASCII', errors="strict", buffers=None)
: Usado para desserialização, ele lê o arquivo armazenado.pickle.loads(bytes_object, *, fix_imports=True, encoding="ASCII", errors="strict", buffers=None)
: Também usado para desserialização, opera com uma string de bytes.
Para distinguir os métodos, lembre-se de que o “s” em pickle.dumps
e pickle.loads
significa “string”.
Exemplo de uso do módulo Python pickle
Para ilustrar melhor como funciona o Python pickle
, usaremos um exemplo simples: uma lista contendo quatro cores. Este é o nosso código:
Em seguida, abrimos um arquivo de texto no formato .pkl e usamos pickle.dump()
para salvar nossa lista nele. Usamos este código para fazer isso:
O prefixo wb
instrui o sistema a abrir o arquivo em formato binário. Assim, os dados contidos também são exibidos como um objeto de bytes. Com dump()
, a lista “cores” é então armazenada neste arquivo. Por fim, o arquivo é fechado automaticamente.
Reverter arquivo de armazenamento ao formato original com Python pickle
Para desserializar um arquivo binário, use o método Python pickle.load()
. Com o código a seguir, convertemos o objeto de volta ao formato original e iniciamos uma saída. Para isso, adicionamos o prefixo rb
.
Com isso, obtemos a seguinte saída:
Serializar dicionário com Python pickle
Até mesmo tipos de dados mais complexos, como dicionários, podem ser facilmente serializados com Python pickle
e depois revertidos ao formato original. Primeiro, criamos um diretório chamado “pessoas” e nele armazenamos diferentes dados pessoais:
No código a seguir, criamos um arquivo, serializamos os dados e, em seguida, desserializamos para verificar a integridade da conversão:
A saída resultante é assim:
Agora, você pode acessar as informações normalmente. Como exemplo, solicitamos a seguinte saída:
Este é o nosso output:
Converter classe em string com Python pickle
No próximo exemplo, salvamos uma classe em uma string usando Python pickle
. Essa classe contém diferentes tipos de dados, que devem ser todos considerados na conversão. Criamos uma classe chamada “ClasseExemplo” e, em seguida, a serializamos. O código correspondente é:
Depois de serializarmos a classe e depois convertê-la de volta ao formato original, obtemos a seguinte saída:
Comprimir objetos serializados com Python pickle
Embora arquivos serializados com Python pickle
podem ser relativamente grandes, especialmente ao armazenar estruturas complexas. Para reduzir o tamanho dos arquivos e otimizar o armazenamento, é possível utilizar compressão adicional, como bzip2, que faz parte da biblioteca padrão dessa linguagem de programação. No exemplo a seguir, criamos uma string, a serializamos e aplicamos o programa de compressão:
Aviso de segurança ao trabalhar com Python pickle
Embora o Python pickle
seja um modo prático e eficaz de converter objetos, há uma desvantagem importante que você deve considerar ao trabalhar com esse módulo: existe a possibilidade do pickle
transportar códigos maliciosos por meio de dados serializados. Isso não é um problema em se tratando dos seus próprios dados, mas é preciso cautela ao lidar com arquivos de terceiros. Recomendamos que você desserialize somente arquivos de armazenamento cuja fonte é conhecida e confiável.
Faça implantações diretamente pelo GitHub: Com o Deploy Now da IONOS, você se beneficia não apenas do reconhecimento automático de frameworks e de configurações rápidas, mas também pode escolher entre diferentes tipos de tarifas. Encontre a solução que se adapta perfeitamente às suas necessidades.