Aff*_*tus 9 python file-io ipython ipython-notebook jupyter-notebook
这是对这个问题的概括:提取进出ipython/jupyter笔记本的泡菜的方法
在最高级别,我正在寻找一种方法来自动总结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"]
Run Code Online (Sandbox Code Playgroud)
我想知道如何轻松地做到这一点,除了pickle对象,包括不同的格式,如:txt,csv,jpg,png等...还可能涉及直接从网络读取数据到笔记本本身.
open您可以通过按照 JRG建议的方式修补内置程序来检查已打开或修改的文件,并且如果您也想跟踪该功能,则应该扩展此功能以修补用于连接到网站的任何功能。
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)
Run Code Online (Sandbox Code Playgroud)
如果我们在解释器中执行它(或将其用作模块),我们可以看到我们修改了什么以及如何打开它。
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
Run Code Online (Sandbox Code Playgroud)
不过,这有些限制,因为重新打开文件时模式将被覆盖,但是可以通过在new_open.