从protobuf字节数据读取到msg

2024-10-03 15:26:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我将以下Base64编码的ProtoBuf数据作为Java应用程序的输入保存在文件中,并希望使用Python读取这些数据:

message="CTwwFl8AAAAAEAAY+LKJASAAKAEyvwYvY2dpLWJpbi90cmFja2VyLmZjZ2kvaW1wP3BwPTEuMCZjb3VudHJ5PUJ SJnR5PTAmYWVscD0wJnB1PTEwMDAwMDAmdHo9LTI0MCZkbT0xJnBpZD0xJmRlbD0mY29udHlwZT0yJmFkcGlkPWV1aXIxLTY1JmR0PTMmbGluPS0xJnByb3RvY29sPSZsbXQ9MCZvc3Y9MTAmdmllPTAmZWNzPS0xJm1lPTAmcmVzPTQxMng4MTImbW49Q1BNJmFnPTEmaW50ZXJzdGl0aWFsPTAmaXA9NDUuMTc3LjE5NC4wJmFsPTUwNDQ0JmFuPW5ldC56ZWRnZS5hbmRyb2lkJmFzPTIyNTExMjgmd3BsPTQmcmU9Njc3JmF0PTEmZmJwPTUuNDYyMTg0NjczNTk3ODMzRS01JnJoPTgxMiZyZXdhcmRlZD0tMSZhaWQ9NzNhYmIwZjAtMGFmYi00ZDRjLTlmYjgtZDg4ZjUzZjViYTAwJnRtcEZsYWc9MCZwYnA9MC4wNjQ5OTk5OTc2MTU4MTQyMSZ2aWV3YWJpbGl0eT05OCZtcmFpZD0wJm5zPTAmcnc9NDEyJmFpbz0xNTQ2MyZmcD0yJnNraXA9LTEmdmlkZW89MCZ1cmlkPTIyNTk3ODEzYjQ5NmViMDlhMjdlMDdmYTY0ODViNGZjYmM4MmJlZDM3NDAxZmI2NTM1Nzg3JnNpZD01NDYwMDk5NTMmc2Q9bmV0LnplZGdlLmFuZHJvaWQmbmF0aXZlPTAmd3A9MC4wNzMwNTA1ODgyOTI3NDk5MiZwZ3Q9MCZjYj0wJmNjPTAmc3Q9MyZhPTc2ODEmc2RudD0wJm9zPTQmY2k9OTA1NjImcGxjPS0xJml2cz0zMjAyNiZsPTAmY289MzMmcHJvZElkcz0mbT0xJmNyPTEyNTE4NiZzPTAmcGRpPSZhdG1fY3ZmPTEmbmF0aXZlVmlkZW89MCZkbWE9MCZzdGFydERlbGF5PS0xJmxpPTQzMSZkYj02NSZkYz02JnBldD0xJmJwPVh4WXdJd0FHWTZVS2RfdkdBQTlWYlkxZ2k3U1RCT0FjRF93LWJnJmFkYXB0ZXJuaWQ9ZXVpcjEtNjU6JjczYWJiMGYwLTBhZmItNGQ0Yy05ZmI4LWQ4OGY1M2Y1YmEwMCwwQg00NS4xNzcuMTk0LjEySCFQpQVYwsMFYABoAHCQ/v////////8Bes0BTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDEwOyBTTS1BMzA1R1QgQnVpbGQvUVAxQS4xOTA3MTEuMDIwOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzgzLjAuNDEwMy4xMDYgTW9iaWxlIFNhZmFyaS81MzcuMzYgKE1vYmlsZTsgYWZtYS1zZGstYS12MjAyMDA2OTk5LjIwMTAwNDAwMC4xKYABAYgB4eathAKQAQKaAQCiATUyMjU5NzgxM2I0OTZlYjA5YTI3ZTA3ZmE2NDg1YjRmY2JjODJiZWQzNzQwMWZiNjUzNTc4N6oBIDQyYTBmZTY1Y2FlNTExZWE5N2Q1MGUyNjZiNjAyNmVksAEBuAH92Nj4BcABAsgBANABAdgBAeABjIoD6AHnePABgTz4AYLSB4ACmvoBiAIBkAL///////////8BmAL///////////8BoAL///////////8BqAIysALAArgCAcACCMgCAdACAtkCb/CFyVTBsD/gAgHoAgDwAgD4ApxOgQMAAAAA16OwP6gDALADALoDkwEoKDE5OTg5NDgmMTk5ODk0OSl8KDE5OTg5NTAmMTk5ODk1MSl8KDE5OTg5NTImMTk5ODk1Myl8KDE5OTg5NTQmMTk5ODk1NSl8KDE5OTg5NTYmMTk5ODk1Nyl8KDE5OTg5NTgmMTk5ODk1OSl8KDE5OTg5NjAmMTk5ODk2MSkpJigxOTk4OTYyKSYoMTk5ODk2MynCAwkIoJF8FQAAgL/IAwDQAwHYA////////////wHgA////////////wHoA////////////wH4A////////////wGABAaIBP///////////wGQBACYBACgBACoBAK4BJf2e7gEu4l8wQQAAAAAAAAAAMkEb/CFyVTBsD/SBAkKABIBMBoAIgDYBADgBADwBAP4BASABUGIBQGQBQCYBQOiBQUNAACAP6gFnAOwBawGuAUAwAUAygUCMTDQBQLaBQc0MTJ4ODEy4gUDQ1BN6QUAAAAAAADwP/EFAAAAANejsD/5BV0471w4oww/gQYpXI/C9SisP4oGAJIGAJoGAKEGgcGrf3Gzsj+oBgSyBgC5BgAAAAAAAAAAyAZi2Ab///////////8B4Ab///////////8B6AYA8Ab///////////8B+Ab///////////8BgAf///////////8BiAcBkAcAmAcAogcAqAcBsAcDugcMNDUuMTc3LjE5NC4wwAcAyAf///////////8B0Af///////////8B2Af///////////8B4gcA6gcCLTE="

代码:

import base64
import binascii
from google.protobuf.json_format import MessageToJson

from google.protobuf.message import Message

print(base64.b64decode(message))
// i was trying like below,but is not working 
jsonObj = Message.ParseFromString(message)

print(jsonObj)

.proto文件

option java_package = "net.data.logprocessor.common.logformats.proto";

message UserSegmentInfoProto
{
    optional int64 id = 1;
    optional float weight = 2;
}

message ConversionInfo
{
    optional string transactionId = 1;
    optional string transactionAmount = 2;
    optional string transactionInfo = 3;
}

message IoPricingInfo
{
    optional float attributionRatio = 1;
}

message TrackerLogProto
{
    optional sfixed64 timestamp = 1;
    optional string uniqueResponseId = 2;
    optional int64 eserverId = 3;
    optional int64 trackerId = 4;
    optional int64 creativeId = 5;
    optional int64 advertiserLiId = 6;
    optional int64 advertiserIoId = 7;
    optional int64 advertiserId = 8;
    optional int64 publisherLiId = 9;
    optional int64 publisherIoId = 10;
    optional int64 publisherId = 11;
    optional int64 sectionId = 12;
    optional int64 pixelId = 13;
    optional int64 countryId = 14;
    optional int64 regionId = 15;
    optional int64 cityId = 16;
    optional int64 creativeHeight = 17;
    optional int64 creativeWidth = 18;
    optional int64 bucketizedCreativeHeight = 19;
    optional int64 bucketizedCreativeWidth = 20;
    optional int64 creativeOfferType = 21;
    optional int64 siteId = 22;
    optional int64 channelId = 23;
    optional int64 bucketizedAdvertiserLiFrequency = 24;
    optional int64 trackingType = 25;
    optional int64 isExchange = 26;
    optional int64 impressions = 27;
    optional int64 clickRequests = 28;
    optional int64 clicks = 29;
    optional int64 conversions = 30;
    optional double moneySpent = 31;
    optional double moneyEarned = 32;
    optional string userCookie = 33;
    optional string userIp = 34;
    optional int64 isLearning = 35;
    optional int64 statusCode = 36;
    optional float lastResponseTime = 37;
    optional string requestUri = 38;
    optional string referrer = 39;
    optional string userAgent = 40;
    optional string uniqueRowId = 41;
    optional double notionalBudgetSpent = 42;
    optional int64 impressionClickValidationStatusCode = 43;
    optional string advertiserTargetingExpression = 44;
    optional string publisherTargetingExpression = 45;
    repeated UserSegmentInfoProto userSegments = 46;
    optional int64 conversionType = 47;
    optional int64 creativeViewFrequency = 48;
    optional int64 creativeClickFrequency = 49;
    optional int64 advertiserIoViewFrequency = 50;
    optional int64 advertiserIoClickFrequency = 51;
    optional int64 timezone = 52;
    repeated int64 impressionPiggybackPixelIds = 53;
    optional int64 creativeViewFrequencyOld = 54;
    optional int64 debugStatusCode = 55;
    repeated int64 targetedSegmentIds = 56;
    repeated int64 blockedSegmentIds = 57; 
    optional double revenue = 58;
    optional double cost = 59;
    optional double budgetSpent = 60;
    optional ConversionInfo conversionInfo = 61;
    optional int64 impressionTime = 62;
    optional int64 clickTime = 63;
    optional IoPricingInfo ioPricingInfo = 64;
}

我试图解码和读取消息,但得到了不可打印的数据。如何读取数据?我是ProtoBuf的新手。有人,请带我到这里


Tags: 文件数据fromimportmessagestringgooglefloat