在Python中读取协议缓冲区文件

在Python中读取协议缓冲区文件,python,json,python-3.x,python-requests,protocol-buffers,Python,Json,Python 3.x,Python Requests,Protocol Buffers,我正在请求公共交通API进行数据分析。多个文件为JSON格式,易于处理;但是,有些文件是.protobuf格式的 我很好奇如何将这些文件解析为人类可读的格式。例如,如果我在文本编辑器中打开.protobuf文件,我将收到以下信息: 1"$ +(B���uC-(�̉�B 1462; 2"6 741127020 *F �ZB�����C-(�̉�B 1583< 3"7 719255020 *10 K�B�8��C-FH@(�̉�B 1220< 4"7 1”$ +(B

我正在请求公共交通API进行数据分析。多个文件为JSON格式,易于处理;但是,有些文件是
.protobuf
格式的

我很好奇如何将这些文件解析为人类可读的格式。例如,如果我在文本编辑器中打开
.protobuf
文件,我将收到以下信息:

1"$
+(B���uC-(�̉�B
1462;
2"6

    741127020 *F
�ZB�����C-(�̉�B
1583<
3"7

    719255020 *10
K�B�8��C-FH@(�̉�B
1220<
4"7
1”$
+(B)���加州大学-(�̉�B
1462;
2"6
741127020*F
�ZB�����C-(�̉�B
1583<
3"7
719255020 *10
K�B�8.��C-FH@(�̉�B
1220<
4"7

谢谢!

Protobuffer是一种二进制格式,因此它在原始状态下不可读。要读取它,请获取并安装:

pip install --upgrade gtfs-realtime-bindings
拥有这些文件后,您可以下载pb文件或在本地轻松阅读:

from google.transit import gtfs_realtime_pb2
import urllib.request 

feed = gtfs_realtime_pb2.FeedMessage()
pb_url = "http://someURL/someFile.pb"

with urllib.request.urlopen(pb_url) as response:
    feed.ParseFromString(response.read())
    print(feed)
这将为您提供如下信息:

header {
  gtfs_realtime_version: "1.0"
  incrementality: FULL_DATASET
  timestamp: 1579313685
}
entity {
  id: "10-abc-O-1"
  trip_update {
    trip {
      trip_id: "10-1622-O-1"
    }
...

太棒了,非常感谢。注意::看看提供的超链接标记-你必须像这样实例化
feed
来自google.transit import gtfs\u realtime\u pb2 import urllib feed=gtfs\u realtime\u pb2.FeedMessage()