Google Protobufメッセージの人にやさしいコンテンツを印刷する可能性はどこにもありませんでした。
Python for Java's toString()
またはC++のDebugString()
に同等のものはありますか?
pythonでprotobuf 2.0
を使用した読み取り/書き込みhuman friendlyテキストファイルの例を次に示します。
from google.protobuf import text_format
テキストファイルから読み取る
f = open('a.txt', 'r')
address_book = addressbook_pb2.AddressBook() # replace with your own message
text_format.Parse(f.read(), address_book)
f.close()
テキストファイルに書き込む
f = open('b.txt', 'w')
f.write(text_format.MessageToString(address_book))
f.close()
c ++と同等のものは次のとおりです。
bool ReadProtoFromTextFile(const std::string filename, google::protobuf::Message* proto)
{
int fd = _open(filename.c_str(), O_RDONLY);
if (fd == -1)
return false;
google::protobuf::io::FileInputStream* input = new google::protobuf::io::FileInputStream(fd);
bool success = google::protobuf::TextFormat::Parse(input, proto);
delete input;
_close(fd);
return success;
}
bool WriteProtoToTextFile(const google::protobuf::Message& proto, const std::string filename)
{
int fd = _open(filename.c_str(), O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (fd == -1)
return false;
google::protobuf::io::FileOutputStream* output = new google::protobuf::io::FileOutputStream(fd);
bool success = google::protobuf::TextFormat::Print(proto, output);
delete output;
_close(fd);
return success;
}
回答どおり、print
および__str__
機能しますが、デバッグ文字列以外には使用しません。
ユーザーが目にする可能性のあるものに書き込んでいる場合は、 google.protobuf.text_format
モジュール。さらにいくつかのコントロール(UTF8文字列をエスケープするかどうかなど)と、テキスト形式をprotobufとして解析するための関数があります。