代码之家  ›  专栏  ›  技术社区  ›  NScara

从Python中的二进制值解压缩文件[关闭]

  •  -3
  • NScara  · 技术社区  · 1 年前

    我有一个 二进制值 以“504B030414…”开头的十六进制字符串,该字符串应该是压缩的XML文件。

    使用Python,如何解压缩/读取此文件?使用以下内容,我得到“ zip文件。BadZipFile:文件不是zip文件 “(特意截断的字符串):

    import zipfile
    import io
    original_zip_data = "504B030414..."
    filebytes = io.StringIO(original_zip_data)
    myzipfile = zipfile.ZipFile(filebytes)
    

    下面链接的答案使用字节类型很有帮助:b'PK\x03\x04…'

    有没有办法将我的字符串转换为类似的格式,或者我的字符串真的是损坏的/“BadZipFile”? Unzip buffer with Python?

    1 回复  |  直到 1 年前
        1
  •  1
  •   Isaiah Young    1 年前

    问题是您需要将十六进制字符串转换为字节。io.StringIO类将与文本数据而非二进制数据一起使用。

    以下是正确的方法:

    import zipfile
    import io
    
    #Hex string/ Zip file
    original_zip_data = "504B030414..."
    
    
    # Convert to bytes
    filebytes = io.BytesIO(bytes.fromhex(original_zip_data))
    
    # Read the file and print
    with zipfile.ZipFile(filebytes, 'r') as myzipfile:
        file_content = myzipfile.read('fileinside.txt') 
        print(file_content.decode('utf-8'))
    

    在本例中,我们将十六进制字符串转换为字节,创建一个类似文件的对象,然后读取zip文件中的文件。