2014-07-10 7 views
6

Aktualnie korzystam z serwera, który zapewnia bufory protokołów. Mogę potencjalnie otrzymać bardzo dużą liczbę wiadomości. Obecnie mój proces czytać bufory protokół i konwertować je do Pandy DataFrame (nie koniecznym krokiem w ogóle, ale Pandy oferuje ładne narzędzi do analizy zbiorów danych) wynosi:Tworzenie słownika Pythona takiego jak obiekt z buforów protokołu do użytku w pandach

  1. Czytaj bufor protokół, będzie to google protobuf object
  2. buforów protokołu Konwersja do słownika za pomocą protobuf_to_dict
  3. korzystanie pandas.DataFrame.from_records dostać DataFrame

działa to doskonale, ale ze względu na dużą liczbę wiadomości, które czytam od protobuf, jest całkiem nieefektywne c przechodź na słownik, a następnie na pandy. Moje pytanie brzmi: czy możliwe jest stworzenie klasy, która może sprawić, że obiekt python protobuf będzie wyglądał jak słownik? To znaczy, usuń krok 2. Pomocne będą jakiekolwiek odniesienia lub pseudokod.

+1

Ale 'Konwersja bufory protokół do dictionary' sprawia protobuf obiekt pyton wyglądać słownika;) Ty raczej potrzebują' pandas.DataFrame.from_protbuf' ale nie wiem odpowiedź na ten problem. – furas

+1

Spojrzałem na kod, zdecydowanie * nie * wygląda tak, jakby owijał obiekt protobuf, ale raczej tworzy prawdziwy nowy słownik. Wierzę, że @Justin szuka czegoś, co się tylko otacza, bez kopiowania danych. – user3820547

+0

Tak, chciałbym, aby obiekt google protobuf wyglądał jak słownik zamiast kopiowania danych do Pythona. – Justin

Odpowiedz

3

Możesz chcieć sprawdzić pakiet python ProtoText. Udostępnia on na miejscu operację podobną do dyktowania, aby uzyskać dostęp do obiektu protobuf.

Przykładowe użycie: Załóżmy, że masz obiekt python protobuf person_obj.

import ProtoText 
print person_obj['name']  # print out the person_obj.name 
person_obj['name'] = 'David' # set the attribute 'name' to 'David' 
# again set the attribute 'name' to 'David' but in batch mode 
person_obj.update({'name': 'David'}) 
print ('name' in person_obj) # print whether the 'name' attribute is set in person_obj 
# the 'in' operator is better than the google implementation HasField function 
# in the sense that it won't raise Exception even if the field is not defined 
Powiązane problemy