我已经阅读了文档,在 python 中使用 capnp 列表似乎很容易。
首先,您需要一个 .capnp 文件,其中包含一个带有列表变量的类的定义:
#floatbook.capnp
@0xbde7cca9517a2373;
struct FloatBook {
floats @0 :List(Float64);
}
要使用我的 .capnp 架构中的数据写入然后读取二进制文件,我编写了以下 Python 脚本:
import capnp
# Load capnp schema manually from file
capnp.remove_import_hook()
floatbook_capnp = capnp.load('floatbook.capnp')
# Create a new FloatBook object from imported capnp schema
floatbook = floatbook_capnp.FloatBook.new_message()
# Initialize a new list inside the FloatBook object and set its values
floats = floatbook.init('floats', 2)
floats[0] = 1.5
floats[1] = 2.5
# Write the FloatBook object to a binary file
f = open('example.bin', 'w+b')
floatbook.write(f)
# Read the FloatBook object back from the created binary file
f = open('example.bin', 'rb')
floatbook = floatbook_capnp.FloatBook.read(f)
# Print every float inside the read FloatBook object
print(type(floatbook.floats))
for float in floatbook.floats:
print(float)
这是我运行此脚本后 PowerShell 控制台的内容:
PS C:\Users\anon> & test.py
<class 'capnp.lib.capnp._DynamicListReader'>
1.5
2.5
编辑1:
除了写入和读取文件之外,还可以写入和读取字节字符串:
serialized = floatbook.to_bytes()
floatbook = floatbook_capnp.FloatBook.from_bytes(serialized)