python通用编码_python base64编码然后解码通用对象

我不确定您要完成什么,但是您可以对任何具有

bytes

陈述。在给出的示例中,您将numpy数组编码为base64。

这是因为numpy数组具有

字节

形式。你可以用两种方法

bytes()

在数组周围或使用

.tobytes()

方法。

import numpy as np

x = np.array([1,2,3])

bytes(x)

# returns:

b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00'

x.tobytes()

# returns:

b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00'

因为我们有一个

字节

数组的表示,可以将其传递给base64编码器。注意,如果对象不是一个类似字节的对象,它将

base64

将尝试在编码前转换它,如下例所示:

base64.b64encode(x)

# returns

b'AQAAAAIAAAADAAAA'

base64.b64encode(x.tobytes())

# returns

b'AQAAAAIAAAADAAAA'

字节数组没有什么特别的。它只是一个数字序列!就这样。您没有恢复numpy数组的原因是因为编码解码过程仍然会让您得到

x.tobytes()

x

本身。

要返回原始对象,需要一个可以读取字节序列并返回某种类型对象的接口。幸运的是,numpy可以通过

frombuffer

功能。但是,您需要告诉numpy它正在以字节的形式读取的数组类型。

换句话说,你可以

int32

数组和

int16

数组具有相同的字节表示,但要恢复正确的字节表示,需要告诉numpy哪种类型是正确的。所以你需要一些关于物体的知识。

x = np.array([1,2,3])

# encode as base 64

x_64 = base64.b64encode(x.tobytes())

# decode back to bytes

x_bytes = base64.b64decode(x_64)

# use numpy to recreate original array of ints

np.frombuffer(x_bytes, dtype=int)

# returns:

np.array([1, 2, 3])

如果您希望保存一个对象,然后在以后恢复它,那么这个过程称为序列化。有两个处理序列化的非常好的包,第一个在标准库中,调用

pickle

,第二个被称为

dill

可以处理更复杂的物体。

import pickle

x = np.array([1,2,3])

pickled_x = pickle.dumps(x)

# pickled_x is a bytes-object that is a hard to read by humans.

pickle.loads(x)

# returns:

np.array([1, 2, 3])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值