为什么python protobuf对象中的扩展属性不可访问?

2024-06-08 05:06:59 发布

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

我试图用Python读取和分析来自纽约地铁的GTFS实时数据。到目前为止,我已经成功地使用了gtfs-realtime.proto和{}来生成正确的Python类,并将protobuf数据解析为Python对象。在

当试图访问这些对象中的某些字段时,我的问题就来了。例如,标题(feed.header)如下所示:

gtfs_realtime_version: "1.0"
incrementality: FULL_DATASET
timestamp: 1533111586
[nyct_feed_header] {
  nyct_subway_version: "1.0"
  trip_replacement_period {
    route_id: "A"
    replacement_period {
      end: 1533113386
 ...

我可以使用点访问来访问前三个属性,但不能使用nyct_feed_header。我怀疑这是因为它是nyct-subway.proto扩展的一部分,而其他三个是原始扩展的一部分。在

我发现这个属性在feed.header.ListFields(),但由于它返回(name,attribute)对的列表,因此访问它最多也很难。在

为什么扩展中的属性不能像其他属性一样被点访问访问?有没有比使用ListFields更好或更优雅的方法来访问它们?在


Tags: 数据对象属性versionfeedrealtimeperiodproto
1条回答
网友
1楼 · 发布于 2024-06-08 05:06:59

{{1}通过^属性访问{1}。E、 g.使用GTF和纽约市交通局扩展:

import gtfs_realtime_pb2 as gtfs
import nyct_subway_pb2 as nyct

feed = gtfs.FeedMessage()
feed.ParseFromString(...)
feed.entity[0].trip_update.trip.Extensions[nyct.nyct_trip_descriptor].direction

相关问题 更多 >

    热门问题