在 Python 中读取协议缓冲区文件
Reading a protocol buffer file in Python
我正在请求 public 交通工具 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
谢谢!
Protobuffer 是一种二进制格式,因此在原始状态下它不是人类可读的。要阅读它,请获取 python bindings from Google 并安装:
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"
}
...
我正在请求 public 交通工具 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
谢谢!
Protobuffer 是一种二进制格式,因此在原始状态下它不是人类可读的。要阅读它,请获取 python bindings from Google 并安装:
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"
}
...