Чтение файла буфера протокола в Python - PullRequest
0 голосов
/ 18 января 2020

Я отправляю запросы в API транспорта c для анализа данных. Несколько файлов имеют формат 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 Ответ

1 голос
/ 18 января 2020

Protobuffer - это двоичный формат, поэтому он не читается человеком в исходном состоянии. Чтобы прочитать его, go получите привязки python от 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"
    }
...
...