【发布时间】:2018-11-14 15:46:04
【问题描述】:
我正在尝试用 Python 读取和分析来自纽约地铁的 GTFS 实时数据。到目前为止,我已经成功地使用了gtfs-realtime.proto 和nyct-subway.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 更好或更优雅的方式来访问它们?
【问题讨论】:
-
使用 protobuf 读取 GTFS 提要而不是例如谷歌的transitfeed包github.com/google/transitfeed? AFAIK GTFS 本质上是一种 CSV 文件格式。
-
您对 GTFS 的看法是正确的 - 它通常以静态 CSV 格式提供。不过,问题是关于 GTFS-realtime - 一个相关但独特的使用 protobuf 的实时交通信息标准。见developers.google.com/transit/gtfs-realtime
标签: python protocol-buffers gtfs