我有一個包含重複字段的protobuf消息。我想刪除列表中的某個項目,但似乎無法找到一個好方法,無需將所有項目從重複字段中複製到列表中,清除重複字段並重新填充。如何從python中的重複protobuf字段中刪除項目?
在C++中有一個RemoveLast()
功能,但是這似乎並沒有出現在Python的API中......
我有一個包含重複字段的protobuf消息。我想刪除列表中的某個項目,但似乎無法找到一個好方法,無需將所有項目從重複字段中複製到列表中,清除重複字段並重新填充。如何從python中的重複protobuf字段中刪除項目?
在C++中有一個RemoveLast()
功能,但是這似乎並沒有出現在Python的API中......
如documentation指出的,在包裝紙的Protobuf重複字段的對象的行爲就像一個常規的Python序列。因此,你應該能夠簡單地做
del foo.fields[index]
例如,刪除最後一個元素,
del foo.fields[-1]
const google::protobuf::Descriptor *descriptor = m_pMessage->GetDescriptor();
const google::protobuf::Reflection *reflection = m_pMessage->GetReflection();
const google::protobuf::FieldDescriptor* field = descriptor->FindFieldByName("my_list_name");
if (i<list_size-1)
{
reflection->SwapElements(m_pMessage, field, i, list_size-1);
}
reflection->RemoveLast(m_pMessage, field);
答案顯然要求Python API ... – nneonneo 2014-04-06 03:21:19
如果你想刪除所有重複的字段,使用'del foo.fields [:]' – 2014-05-02 02:42:23