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

Protobuf(Python):读取二进制数据文件并将数据分配给重复对象

  •  0
  • user180574  · 技术社区  · 2 年前

    我有一个protobuf文件,如下所示。

    syntax = "proto3";
    
    message Message {
       repeated bytes data = 1;
    }
    

    这是Python代码。

    import test_pb2
    message = test_pb2.Message()
    with open("test.dat", mode='rb') as file:
       message.data.extend(file.read())
    

    这就是错误。

    Traceback (most recent call last):
      File "./test.py", line 7, in <module>
        message.data.extend(file.read())
    TypeError: 48 has type int, but expected one of: bytes
    

    我也尝试了“read_bytes()”,类似的错误。

    以下代码运行良好。

    x = list()
    with open("test.dat", mode='rb') as file:
       x.extend(file.read())
    

    看起来,重复的对象并不像列表那样工作。

    1 回复  |  直到 2 年前
        1
  •  1
  •   DazWilkin    2 年前

    尝试:

    import test_pb2
    
    message = test_pb2.Message()
    
    with open("test.dat",mode="rb") as file:
        message.data.extend([file.read()])
    
    print(message.data)
    

    file.read() 退货 bytes 但你需要 Iterable[bytes]