2017-02-17 1 views
9

이 출신 서면 결정 : 가장 높은 수준에서 Way to extract pickles coming in and out of ipython/jupyter notebook모든 파일에 읽고이 질문에 일반화 ipython 노트북

을, 나는 자동으로 ipython 노트북에서 일어나는 것을 요약하는 방법을 찾고 있어요. 문제를 단순화하는 방법 중 하나는 노트북 내부의 모든 데이터 조작을 블랙 박스로 취급하고 입력과 출력이 무엇인지에만 집중하는 것입니다. 그래서, ipython 노트북에 파일 경로가 주어지는 방법이 있습니까? 당신이 쉽게 다른 모든 파일/웹 사이트를 메모리로 읽어 들이고, 이후에 그것들이 나중에 쓴/쓰는 모든 파일을 어떻게 결정할 수 있습니까? 나는 어쩌면 입력과 출력을 위해 그것을 구문 분석, 파일을 검색하는 기능이있을 수 있습니다 생각하고, 쉽게 액세스 할 수 있도록 사전에 저장합니다 해요 : 난 그냥 넘어 쉽게이 작업을 수행하는 방법을 궁금하네요

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"] 

txt, csv, jpg, png 등과 같은 다양한 형식을 포함하도록 개체를 피클 링하십시오. 또한 웹에서 직접 데이터를 노트북 자체로 읽는 작업이 필요할 수 있습니다.

+0

dill을 사용하여 파이썬 대화 형 세션 전체를 피클 할 수 있습니다. http://trac.mystic.cacr.caltech.edu/project/pathos/wiki/dill.html – denfromufa

+0

@denfromufa 아마도 뭔가를 놓쳤습니다 ... 어떻게 노트북에서 무슨 일이 일어 났는지 설명하는 데 도움이됩니까? – Afflatus

+0

실제로 노트북을 실행하지 않으면이 작업을 수행 할 수 없습니다. http://stackoverflow.com/a/2023709/464289에서와 같이 __builtin__.open을 대체 할 수 있으며, 동일한 기능을 사용하여 파일을 다운로드하는 경우 파일을 원하는대로 기록한 호출로 바꿀 수 있습니다. 파일을 다운로드합니다. – JRG

답변

4

내장 파일 open을 JRG suggested으로 패치하면 어떤 파일을 열 었는지 확인할 수 있습니다. 또한이 기능을 추적하여 웹 사이트에 연결하는 기능을 패치해야합니다.

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) 

인터프리터에서 이것을 실행하거나 모듈로 사용하면 수정 한 내용과 열어 본 방법을 알 수 있습니다.

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 

이 다소 파일이 다시 열릴 때 모드 덮어되지만 그 new_open가 수행 일부 여분 검사 고정 수있는 바와 같이, 비록 제한된다.