【问题标题】:msgpack gets string data back as binarymsgpack 以二进制形式返回字符串数据
【发布时间】:2019-01-12 16:25:34
【问题描述】:

How do I read and write with msgpack? 中给出了一个答案(https://stackoverflow.com/a/43442195)如何将数据转储到磁盘并读回。

我必须调整那里给出的答案(即:添加“b”选项以进行读写)以使其正常工作。但是从磁盘读取的数据仍然不同,因为从磁盘读取的字符串现在似乎是二进制的。

我怎样才能避免这种情况?

这是我改编的代码:

import msgpack

# Define data

data = {'a list': [1, 42, 3.141, 1337, 'help'],
        'a string': 'bla',
        'another dict': {'foo': 'bar',
                         'key': 'value',
                         'the answer': 42}}

# Write msgpack file
with open('data.msgpack', 'wb') as outfile:
    msgpack.pack(data, outfile)

# Read msgpack file
with open('data.msgpack', "rb") as data_file:
    # data_loaded = json.load(data_file)
    data_loaded = msgpack.unpack(data_file)

print(data == data_loaded)
print("data:", data)
print("data_loaded:", data_loaded)

输出:

False
data: {'a list': [1, 42, 3.141, 1337, 'help'], 'a string': 'bla', 'another dict': {'foo': 'bar', 'key': 'value', 'the answer': 42}}
data_loaded: {b'a list': [1, 42, 3.141, 1337, b'help'], b'a string': b'bla', b'another dict': {b'foo': b'bar', b'key': b'value', b'the answer': 42}}

版本似乎 (msgpack._version.py) 是:

version = (0, 6, 0)

【问题讨论】:

    标签: python msgpack


    【解决方案1】:

    在阅读时设置raw=False 就可以了。代码:

    import msgpack
    
    # Define data
    
    data = {'a list': [1, 42, 3.141, 1337, 'help'],
            'a string': 'bla',
            'another dict': {'foo': 'bar',
                             'key': 'value',
                             'the answer': 42}}
    
    # Write msgpack file
    with open('data.msgpack', 'wb') as outfile:
        msgpack.pack(data, outfile, )
    
    # Read msgpack file
    with open('data.msgpack', "rb") as data_file:
        # data_loaded = json.load(data_file)
        data_loaded = msgpack.unpack(data_file,raw=False)
    
    print(data == data_loaded)
    print("data:", data)
    print("data_loaded:", data_loaded)
    

    输出:

    True
    data: {'a list': [1, 42, 3.141, 1337, 'help'], 'a string': 'bla', 'another dict': {'foo': 'bar', 'key': 'value', 'the answer': 42}}
    data_loaded: {'a list': [1, 42, 3.141, 1337, 'help'], 'a string': 'bla', 'another dict': {'foo': 'bar', 'key': 'value', 'the answer': 42}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-31
      • 2020-07-30
      • 2013-01-17
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      相关资源
      最近更新 更多