python base64 文件

为啥用Base64呢?

Base64编码是从二进制值到某些特定字符的编码,这些特定字符一共64个,所以称作Base64。
为什么不直接传输二进制呢?比如图片,或者字符,既然实际传输时它们都是二进制字节流。而且即使Base64编码过的字符串最终也是二进制(通常是UTF-8编码,兼容ASCII编码)在网络上传输的,那么用4/3倍带宽传输数据的Base64究竟有什么意义?真正的原因是二进制不兼容。某些二进制值,在一些硬件上,比如在不同的路由器,老电脑上,表示的意义不一样,做的处理也不一样。同样,一些老的软件,网络协议也有类似的问题。但是万幸,Base64使用的64个字符,经ASCII/UTF-8编码后在大多数机器,软件上的行为是一样的。
链接:https://www.zhihu.com/question/36306744/answer/673975520
来源:知乎

Python3 遇到base64写入zip文件怎么解决

今天同事问道我一个问题:后台有一个接口返回的是{"res":"base64"},这个base64怎么通过python保存成文件啊?

这里可以知道文件在网络传输的时候基本上都是base64传输

首先是需要打开一个文件来接受这个base64的内容(假设他是png图片)

with open('test.png', 'wb') as f:
    f.write(res)  # 这里的res是字节类型需要通过下面的代码获取

我们假设获取到了base64字:

上传图片转换成base64的网址

比如我获取到了一个base64:

base_str = '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' 

我们首先需要将base64编码成二进制:

bytes_res = base_str.encode()  # bytes_res 我们称它为:base64的二进制

其次:然后通过python的base64库来将二进制转换解码

# python标准库中提供了base64模块,用来进行转换
import base64
res = base64.b64decode(bytes_str)  # 将base64编码的bytes类型进行解码,返回解码后的bytes类型

with open('test.png', 'wb') as f:
    f.write(res)

这样本地就获取到了一个test.png的图片

python保存base64文件完整代码如下:

"""
假如我们从接口获取到了base64(一般是文件或者图片),我们需要将base64
"""
base_str = '这里你通过上面的网址随便传一个图片就可以获取到一个base64'  # 这个是base64
# 1我们首先将base64字符串编码成bytes 
bytes_str = base_str.encode()  # 默认是utf-8.

# 2然后通过python的base64库来将二进制转换解码
# python标准库中提供了base64模块,用来进行转换
import base64
# res1 = base64.b64encode(bytes_str)  # 将bytes类型数据进行base64编码,返回编码后的bytes类型
res = base64.b64decode(bytes_str)  # 将base64编码的bytes类型进行解码,返回解码后的bytes类型

with open('test.png', 'wb') as f:
    f.write(res)


如果他是一段话呢?

base_str = '6L+Z5pivcHl0aG9u5Lit5L2/55SoYmFzZTY0'  # 这个是base64
# 1我们首先将base64字符串编码成python的bytes 二进制数据
bytes_str = base_str.encode('utf-8')  # 默认是utf-8.

# 2然后通过python的base64库来将二进制转换解码
# python标准库中提供了base64模块,用来进行转换
import base64

res = base64.b64decode(bytes_str)  # 将base64编码的bytes类型进行解码,返回解码后的bytes类型

print(res.decode())  # 上一步res获取到的是bytes类型,所有通过解码转换成str

我们注意一下res = base64.b64decode(bytes_str) 这里传的是base64编码的bytes类型,其实我们可以直接传base64不需要转换成bytes

base64.b64decode()源码:

def b64decode(s, altchars=None, validate=False):
    """Decode the Base64 encoded bytes-like object or ASCII string s.

    Optional altchars must be a bytes-like object or ASCII string of length 2
    which specifies the alternative alphabet used instead of the '+' and '/'
    characters.

    The result is returned as a bytes object.  A binascii.Error is raised if
    s is incorrectly padded.

    If validate is False (the default), characters that are neither in the
    normal base-64 alphabet nor the alternative alphabet are discarded prior
    to the padding check.  If validate is True, these non-alphabet characters
    in the input result in a binascii.Error.
    """
    s = _bytes_from_decode_data(s)  # 这里人家已经帮我们转换了s.encode('ascii'),我们尽量还是自己转换自己需要的编码格式
    if altchars is not None:
        altchars = _bytes_from_decode_data(altchars)
        assert len(altchars) == 2, repr(altchars)
        s = s.translate(bytes.maketrans(altchars, b'+/'))
    if validate and not re.fullmatch(b'[A-Za-z0-9+/]*={0,2}', s):
        raise binascii.Error('Non-base64 digit found')
    return binascii.a2b_base64(s)
posted @ 2022-07-26 17:38  Tarzen  阅读(2912)  评论(0编辑  收藏  举报