python - 确定从 ipython 笔记本读取和写入的所有文件

标签 python file-io ipython ipython-notebook jupyter-notebook

这是对这个问题的概括:Way to extract pickles coming in and out of ipython / jupyter notebook

在最高级别,我正在寻找一种方法来自动总结 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"]

我想知道如何轻松地做到这一点,除了 pickle 对象之外,还包括不同的格式,例如:txt、csv、jpg、png 等……而且这可能涉及直接从 Web 读取数据到笔记本本身。

最佳答案

您可以通过将内置的 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 中执行一些额外检查来修复。

关于python - 确定从 ipython 笔记本读取和写入的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42288163/

相关文章:

python - 如何区分点散布matplotlib on pick

asp.net - 扩展 ObjectCache 以创建基于文件的缓存替代方案

ipython - Jupyter notebook 单元出现故障时播放声音

python - 在任何(未捕获的)异常上打开 IPython shell

python - 使用 argsort 进行 Numpy 索引

python - 需要特定命令从 df 命令获取特定值

python - Python 面向对象中的数组

c++ - 除了文本文件之外,您能否将 C++ 桌面应用程序中的输入数据或其他类型的数据存储在文件中?

c - 从文本文件中读取每个 float 并跳过 C 上的其余部分

jupyter-notebook - 在 ipython 笔记本中嵌入图像以进行分发