如何使用Python在JSON中解压缩base 64编码的数据?

a64a0gku  于 2023-02-17  发布在  Python
关注(0)|答案(1)|浏览(290)

我正在使用Selenium Grid,需要下载文件以进行自动测试下载。我遇到了一个问题,响应不是文件内容本身,而是内容先压缩,然后 Package 在JSON中。
下面是我试图解开的答案:

b'{\n  "filename": "test.txt",\n  "contents": "UEsDBBQACAgIAFV1TlYAAAAAAAAAAAAAAAAIAAAAdGVzdC50eHQDAFBLBwgAAAAAAgAAAAAAAABQSwECFAAUAAgICABVdU5WAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAdGVzdC50eHRQSwUGAAAAAAEAAQA2AAAAOAAAAAAA"\n}'

上面的数据应该包含一个名为test.txt的空文件。
根据文档,内容是Base64编码的压缩文件夹,我希望能够解压缩此字符串并读取其中test.txt文件的内容,但我不确定如何解压缩Base64编码的字节字符串。
我使用Python,所以如果有人知道如何解压缩内容并读取其中的test.txt文件,那将非常有帮助。
以下是用于下载文件的Selenium Grid文档:https://www.selenium.dev/documentation/grid/configuration/cli_options/#important-information-when-dowloading-a-file

efzxgjgh

efzxgjgh1#

在解析json之后,您需要对内容进行b64decode,然后将结果存储在临时文件或BytesIO对象中,以便可以使用ZipFile:

import json
from base64 import b64decode
from io import BytesIO
from pathlib import Path
from zipfile import ZipFile

data = b'{\n  "filename": "test.txt",\n  "contents": "UEsDBBQACAgIAFV1TlYAAAAAAAAAAAAAAAAIAAAAdGVzdC50eHQDAFBLBwgAAAAAAgAAAAAAAABQSwECFAAUAAgICABVdU5WAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAdGVzdC50eHRQSwUGAAAAAAEAAQA2AAAAOAAAAAAA"\n}'

contents = json.loads(data)['contents']
bio = BytesIO(b64decode(contents))

然后,我们可以看到存储在该zip文件中的文件的元数据(此步骤不是必需的):

>>> with ZipFile(bio) as zip_file:
...     zip_file.infolist()
...
[<ZipInfo filename='test.txt' compress_type=deflate file_size=0 compress_size=2>]

要解压缩所有文件,可以使用extractall方法:

>>> path = Path('temp/extracted')

>>> path.mkdir()

>>> with ZipFile(bio) as zip_file:
...     zip_file.extractall(path)
...

>>> for p in path.iterdir():
...     print(p.as_posix())
...
temp/extracted/test.txt

如果需要,还可以解压缩单个文件。

相关问题