调用jupyter notebook文件内的函数一种简单方法

python开发环境jupyter notebook良好的交互式和模块化受到很多python开发人员的青睐,但是jupyter notebook是以json格式保存文件内容的,而不是python文件那样的普通格式,所以不能直接被python解析器解析,如何调用.ipynb中的module也成为一个问题。本文介绍一种方法,使得只要在我们的工作目录下放置一个python文件,就可以正常调用其他jupyter notebook文件。

Jupyter Notebook官网介绍了一种简单的方法:http://jupyter-notebook.readthedocs.io/en/latest/examples/Notebook/Importing Notebooks.html

添加jupyter notebook解析文件

    首先,创建一个python文件,例如Ipynb_importer.py,代码如下:

import io, os,sys,types
from IPython import get_ipython
from nbformat import read
from IPython.core.interactiveshell import InteractiveShell

class NotebookFinder(object):
    """Module finder that locates Jupyter Notebooks"""
    def __init__(self):
        self.loaders = {}

    def find_module(self, fullname, path=None):
        nb_path = find_notebook(fullname, path)
        if not nb_path:
            return

        key = path
        if path:
            # lists aren't hashable
            key = os.path.sep.join(path)

        if key not in self.loaders:
            self.loaders[key] = NotebookLoader(path)
        return self.loaders[key]

def find_notebook(fullname, path=None):
    """find a notebook, given its fully qualified name and an optional path

    This turns "foo.bar" into "foo/bar.ipynb"
    and tries turning "Foo_Bar" into "Foo Bar" if Foo_Bar
    does not exist.
    """
    name = fullname.rsplit('.', 1)[-1]
    if not path:
        path = ['']
    for d in path:
        nb_path = os.path.join(d, name + ".ipynb")
        if os.path.isfile(nb_path):
            return nb_path
        # let import Notebook_Name find "Notebook Name.ipynb"
        nb_path = nb_path.replace("_", " ")
        if os.path.isfile(nb_path):
            return nb_path

class NotebookLoader(object):
    """Module Loader for Jupyter Notebooks"""
    def __init__(self, path=None):
        self.shell = InteractiveShell.instance()
        self.path = path

    def load_module(self, fullname):
        """import a notebook as a module"""
        path = find_notebook(fullname, self.path)

        print ("importing Jupyter notebook from %s" % path)

        # load the notebook object
        with io.open(path, 'r', encoding='utf-8') as f:
            nb = read(f, 4)


        # create the module and add it to sys.modules
        # if name in sys.modules:
        #    return sys.modules[name]
        mod = types.ModuleType(fullname)
        mod.__file__ = path
        mod.__loader__ = self
        mod.__dict__['get_ipython'] = get_ipython
        sys.modules[fullname] = mod

        # extra work to ensure that magics that would affect the user_ns
        # actually affect the notebook module's ns
        save_user_ns = self.shell.user_ns
        self.shell.user_ns = mod.__dict__

        try:
          for cell in nb.cells:
            if cell.cell_type == 'code':
                # transform the input to executable Python
                code = self.shell.input_transformer_manager.transform_cell(cell.source)
                # run the code in themodule
                exec(code, mod.__dict__)
        finally:
            self.shell.user_ns = save_user_ns
        return mod
sys.meta_path.append(NotebookFinder())

调用jupyter notebook module

    在我们的jupyter notebook文件里调用Ipynb_importer.py,接下来我们就可以像调用普通python文件一样调用其他.ipynb文件里的module了,例如有一个IpynbModule.ipynb文件,里面定义了一个foo函数:
被调用函数

调用例子如下:
调用ipynb函数

    只要在我们的工作目录下放置Ipynb_importer.py文件,就可以正常调用所有的jupyter notebook文件。 这种方法的本质就是使用一个jupyter notenook解析器先对.ipynb文件进行解析,把文件内的各个模块加载到内存里供其他python文件调用。

参考资料:

http://jupyter-notebook.readthedocs.io/en/latest/examples/Notebook/Importing Notebooks.html

  • 30
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 38
    评论
### 回答1: Jupyter Notebook可以通过Python的内置函数open()来读取文件。具体步骤如下: 1. 在Jupyter Notebook中打开一个新的Notebook。 2. 在一个新的代码单元格中,使用open()函数打开要读取的文件。例如,如果要读取名为“example.txt”的文本文件,可以使用以下代码: ``` with open('example.txt', 'r') as f: content = f.read() ``` 其中,'example.txt'是文件的路径和名称,'r'表示以只读模式打开文件,'as f'表示将打开的文件对象命名为f。 3. 使用read()方法读取文件内容。例如,可以使用以下代码将文件内容打印到屏幕上: ``` print(content) ``` 注意:在使用open()函数时,需要注意文件路径和名称的正确性,以及文件的编码格式。如果文件编码格式不是UTF-8,需要在open()函数中指定正确的编码格式。 ### 回答2: Jupyter Notebook一种用于数据分析和可视化的交互式开发环境。在 Jupyter Notebook 中读取文件非常简单,只需要使用 Python 的内置函数 open() 即可。 以下是 Jupyter Notebook 中读取文件的步骤: 1. 在 Jupyter Notebook 中打开一个新的或已有的 Python 文件。 2. 在代码单元格中编写代码,使用 open() 函数打开文件并读取其内容。例如, ``` file = open("example.txt", "r") content = file.read() file.close() ``` 上面的代码使用 open() 函数打开名为 example.txt 的文件,并将其内容读取到 content 变量中。其中,第一个参数是文件名,第二个参数是打开文件的模式,"r" 表示读取模式。读取模式下,文件指针位于文件开头,可以通过 read() 方法读取文件的全部内容。 3. 对读取到的内容进行处理或分析。例如, ``` print(content) ``` 上面的代码将读取到的文件内容打印输出到屏幕上。 4. 关闭文件。由于 open() 函数打开的文件需要手动关闭,因此应该在处理完文件使用 close() 方法关闭文件。例如, ``` file.close() ``` 上面的代码使用 close() 方法关闭了打开的文件。 总之,在 Jupyter Notebook 中读取文件非常简单,只需要使用 Python 的内置函数 open() 即可。需要注意的是,读取文件后需要关闭文件,以释放资源并避免文件损坏。 ### 回答3: Jupyter Notebook是一个非常流行的交互式编程环境,它支持多种编程语言,并且拥有数百种插件和扩展。Jupyter Notebook可以很容易地处理和读取文件。 在Jupyter Notebook中,要读取文件,我们通常可以使用Python自带的open()函数来操作文件。具体步骤如下: 1. 首先,使用open()函数打开文件,可以指定文件的路径和打开模式(例如,'r'表示只读模式,'w'表示写入模式,'a'表示追加模式等)。 2. 然后,使用read()或readlines()函数读取文件中的内容。读取一个文件,可以使用read()函数。如果想要读取文件的每一行,可以使用readlines()函数。 3. 最后,关闭文件使用close()函数关闭打开的文件。 例如,我们可以通过以下代码读取一个文本文件: ``` with open('file.txt', 'r') as f: content = f.read() print(content) ``` 上面的示例代码打开了一个名为“file.txt”的文件,并将其内容读取到一个名为“content”的变量中,随后打印出来。这里open()函数采用了上下文管理器的方式操作文件,所以不需要显式调用close()函数关闭文件。 除了使用Python自带的open()函数外,Jupyter Notebook还支持许多第三方模块来读取不同类型的文件,例如,Pandas库可以读取CSV、Excel、JSON等格式的文件,Numpy库可以读取二进制格式的文件等等。 在实际应用中,我们可以根据自己的需要使用不同的方法来读取文件。需要注意的是,在读取文件时,一定要注意文件的路径和编码方式,以免出现错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值