2017-02-17 21 views
9

Jest to uogólnienie na to pytanie: Way to extract pickles coming in and out of ipython/jupyter notebookUstalanie wszystkich plików do odczytu i napisane z notebookiem ipython

Na najwyższym poziomie, szukam sposobu, aby automatycznie podsumować to, co dzieje się w notesie ipython. Jednym ze sposobów, w jaki widzę uproszczenie tego problemu, jest traktowanie wszystkich manipulacji danymi, które wewnątrz notebooka stanowią blackbox, i skupiają się tylko na tym, jakie są jego wejścia i wyjścia. Czy jest jakiś sposób na podanie ścieżek do notatnika do ipythona, w jaki sposób można łatwo określić wszystkie pliki/strony internetowe, które odczytuje w pamięci, a następnie także wszystkie pliki, które później zapisuje/zrzuca? Zastanawiam może nie może być funkcja, która skanuje plik, analizuje go do wejść i wyjść, a następnie zapisuje je do słownika w celu łatwego dostępu:

summary_dict = summerize_file_io(ipynb_filepath) 

print summary_dict["inputs"] 
> ["../Resources/Data/company_orders.csv", "http://special_company.com/company_financials.csv" ] 

print summary_dict["outputs"] 
> ["orders_histogram.jpg","data_consolidated.pickle"] 

Zastanawiam się, jak to zrobić z łatwością poza tylko zbierać obiekty, aby uwzględnić różne formaty, takie jak: txt, csv, jpg, png, itd., a także może to oznaczać odczytywanie danych bezpośrednio z internetu do samego notebooka.

+0

Możesz zająć się całą sesją interaktywną Pythona za pomocą Koper: http://trac.mystic.cacr.caltech.edu/project/pathos/wiki/dill.html – denfromufa

+0

@denfromufa Być może brakuje mi czegoś ... Jak które pomogą wyjaśnić, co dzieje się w notatniku? – Afflatus

+0

Prawdopodobnie nie będziesz w stanie tego zrobić bez faktycznego uruchomienia notebooka. Możesz zastąpić __builtin__.open jak w http://stackoverflow.com/a/2023709/464289, a jeśli używasz tej samej funkcji do pobierania plików, możesz po prostu zastąpić ją wywołaniem, które loguje, co chcesz, a następnie pobiera plik. – JRG

Odpowiedz

4

Można sprawdzić jakie pliki zostały otwarte lub modyfikowane przez łatanie wbudowanego open jako JRG suggested i należy rozszerzyć tę funkcjonalność załatać wszelkie funkcje służące do podłączenia do stron internetowych, jeśli chcesz śledzić, że dobrze.

import builtins 


modified = {} 
old_open = builtins.open 


def new_open(name, mode='r', *args, **kwargs): 
    modified[name] = mode 
    return old_open(name, mode=mode, *args, **kwargs) 


# patch builtin open 
builtins.open = new_open 


# check modified 
def whats_modified(): 
    print('Session has opened/modified the following files:') 
    for name in sorted(modified): 
     mode = modified[name] 
     print(mode.ljust(8) + name) 

To wykonujemy to w tłumacza (lub wykorzystać go jako moduł), możemy zobaczyć, co mamy zmodyfikowane i jak otworzył ją.

In [4]: with open('ex.txt') as file: 
    ...:  print('ex.txt:', file.read()) 
    ...:  
ex.txt: some text. 



In [5]: with open('other.txt', 'w') as file: 
    ...:  file.write('Other text.\n') 
    ...:  

In [6]: whats_modified() 
Session has opened/modified the following files: 
r  ex.txt 
w  other.txt 

ta jest nieco ograniczona, choć, jak tryb zostaną nadpisane, gdy plik zostaje ponownie otwarty, ale to może być ustalona z niektórych dodatkowych kontroli przeprowadzonych w new_open.

Powiązane problemy