2012-11-26 9 views
17

Używam cPickle do zapisywania zbiorów danych z każdego uruchomienia programu. Ponieważ czasami potrzebuję zobaczyć zarys danych bez uruchamiania kodu, chciałbym w łatwy sposób szybko przejrzeć zawartość, klikając dwukrotnie na plik. Próbuję uniknąć konieczności ładowania terminala i wskazywania Pythona do pliku za każdym razem, po prostu uruchomić skrypt print.Czy istnieje sposób wyświetlenia zawartości pliku cPickle lub pikle bez wczytywania Pythona w systemie Windows?

Szukałem wtyczek Notepad ++, ale nie mogłem niczego znaleźć.

Czy jest jakiś łatwy sposób to zrobić? Czy ktoś ma jakieś sugestie?

Uwaga: uruchomić system Windows 7.

+3

Można "marynować" za pomocą protokołu [ASCII] (http://docs.python.org/2/library/pickle.html#data-stream-format), który można odczytać z notatnika (mimo że jest nie będzie ładnie wyglądać, zwłaszcza jeśli umieścisz tam złożone przedmioty). – Bakuriu

Odpowiedz

9

I NAPRAWDĘ wątpliwości, że istnieje jakiś sposób, aby to zrobić, ponieważ z pickle można pakować w prawie wszystko. Podczas rozpakowywania musisz mieć możliwość załadowania modułów itp., Które zostały załadowane, gdy obiekt został wytrawiony. Innymi słowy, ogólnie rzecz biorąc, aby móc uzyskać unpickle coś, python musi być w stanie odtworzyć "środowisko" programu (lub przynajmniej wystarczająco blisko aproksymacji) - ładowane moduły, klasy w globalnej przestrzeni nazw itp. Zasadniczo nie jest to możliwe bez pomocy użytkownika. Rozważmy:

import pickle 
class Foo(object): pass 

a = Foo() 
with open('data.pickle','wb') as f: 
    pickle.dump(a,f) 

Teraz, jeśli starają się przywrócić to w osobnym skrypcie pyton nie ma możliwości dowiedzenia się, co Foo wygląda i dlatego nie można przywrócić obiekt (chyba, że ​​zdefiniowanie odpowiedniego obiektu w Foo ten skrypt). Nie jest to tak naprawdę proces, który można wykonać bez ludzkiej interwencji.

Oczywiście, prawdopodobnie przydatny specjalny przypadek, w którym po prostu marnujesz obiekty wbudowane i rzeczy ze standardowej biblioteki może być możliwe ... ale nie sądzę, że mógłbyś napisać ogólne rozszerzenie rozpakowujące.

+1

Nie mam pojęcia o marynacie, ale nic nie stoi na przeszkodzie, aby protokół przechowywał wszystkie niezbędne informacje "środowiska" w jego wynikach. W tym przypadku byłoby to dość banalne: Przechowaliśmy jedną klasę nowego stylu bez dodatkowych parametrów. Tak na pewno można to zrobić - może to oznaczać przechowywanie całkiem sporo dodatkowych informacji. – Voo

23

dla Pythona 3.2 +/2.7 + można przeglądać (__repr__ „s of) czekoladę z wiersza poleceń:

$ python -c "import pickle; pickle.dump({'hello': 'world'}, open('obj.dat', 'wb'))" 
$ python -mpickle obj.dat 
{'hello': 'world'} 

To powinno być łatwe do zintegrowania tego w powłoce systemu Windows.

+1

To jest dokładnie odpowiedź, której szukałem, gdy podałem w Google to pytanie (w 2017 r.). Powinien być oznaczony jako zaakceptowana odpowiedź. –

+1

Bardzo przydatne! Wydaje się, że działa również z pikselami w Pythonie 2.7, przynajmniej w jednym przypadku, w którym potrzebowałem tego. –

+0

@ Hans-MartinMosner dzięki, że zaktualizowałem odpowiedź. Prawdopodobnie został przeniesiony. – jth

Powiązane problemy