从.py转换为.ipynb

44

我写了一个Jupyter笔记本,现在它以某种方式转换为.py文件。 我想把它恢复成原始格式。 有人知道如何做吗?

之前有一个关于此的Stack Overflow问题,但解决方案对我不起作用。 将其转换为(而非从)IPython Notebook格式

以下是现在代码的示例。 它是很多代码,因此手动复制和粘贴需要花费数小时。

谢谢帮助。

{
   "cell_type": "code",
   "execution_count": 581,
   "metadata": {},
   "outputs": [],
   "source": [
    "def add_trig_slope(data, size = 1, axis = 0, option = 0, random = False, lower_b = -1, upper_b = 2): \n",
    "    \n",
    "    # To make the gradual decline of the fuck you plot\n",
    "    ## sin, cos, tan, sigmoid, other activation functions?\n",
    "    # need to list the option in the doc string\n",
    "    \n",
    "    ## Add a random element\n",
    "    newdata = data.copy()\n",
    "    cols = list(newdata.columns)\n",
    "    funcs = [math.sin, math.cos, math.tan, expit]\n",
    "    func = funcs[option]\n",
    "    if axis == 0:\n",
    "        for col in cols:\n",
    "            newdata.loc[:, col] -= size * (func(cols.index(col)))\n",
    "            if random:\n",
    "                newdata.loc[:,col] -= np.random.uniform(lower_b,upper_b)\n",
    "\n",
    "    elif axis == 1:\n",
    "        for i, node in enumerate(newdata.index):\n",
    "            newdata.loc[node,:] -= size * (func(i))\n",
    "            if random:\n",
    "                newdata.loc[node,:] -= np.random.uniform(lower_b,upper_b)\n",
    "\n",
    "        \n",
    "    return newdata\n",
    "    \n",
    "    "
   ]


8
这个问题似乎有误导性。据我所知,这个文件并没有被“转换为.py”,它只是一个以错误的“.py”扩展名保存的笔记本文件。把扩展名改回“.ipynb”即可。 - Denziloe
8个回答

48

使用p2j将Python源代码转换为Jupyter Notebook。

从命令行运行:

-->pip install p2j

然后进入您的文件所在的目录。 -->(例如->如果文件在下载目录中,输入cd downloads)

然后运行命令:

-->p2j myscript.py

这将创建一个名为myscript.ipynb的文件。


1
这一点都不高效。它在第一个注释之后就注释掉了所有行。 - Sachin
非常好用: 它将所有以“#”开头且没有前导空格的“主要注释”转换为MarkDown单元,并将每个函数定义分配给一个专用单元。 - Skippy le Grand Gourou

14

非常建议您考虑使用jupytext

运行 conda install jupytextpip install jupytext

然后执行以下命令:jupytext --set-formats ipynb,py <file>.ipynb

这将创建一个 .ipynb 文件,并额外地将其与 .py 文件保持同步:

jupytext --set-formats ipynb,py <file>.ipynb --sync

这将确保在以后保存时Jupyter会让这两个文件保持同步...

最后一点:如果您是GUI用户,则可以在运行jupytext安装命令后,从GUI中完成其他所有操作:文件-->jupytext-->匹配笔记本和轻型脚本: enter image description here


我真的很喜欢这里描述的内容 :) 如果它能够注释文件就好了 :D 因为我是一名构建数据科学的软件工程师 LOL,我将所有东西模块化和容器化 :D 我希望保持软件工程师和数据工程师在和谐中共同工作 :) 每个人都在自己的世界里。 - Marcello DeSales
取决于您所说的注释是什么意思...我认为每个单元格都将被注释,以便可以重建...例如,对于单元格[3],它将以#[3]等为前缀。 - ntg
有没有办法在Pycharm中使用这个? - triplej

10

只需更改扩展名即可重命名,例如对于Linux / MacOS

mv <file>.py <file>.ipynb

或者在Windows上右键重命名并输入具有扩展名的完整名称。
(因为看起来这些内容已经是.ipynb的内容了。)

1
非常感谢!这个完美地解决了我的问题。我会在8分钟后接受答案 - 感谢您如此迅速地回答问题。 - SherbertTheCat
4
这个方法对我没用。当尝试打开Jupyter文件时出现以下错误信息: Unreadable Notebook: C:\Users\Wei-shan\Desktop\python notebooks\regression-trees\cart_weishan.ipynb NotJSONError('Notebook does not appear to be JSON: \'"""Implementation of the CART algorithm...') - Wei Shan Lee
25
答案中的方法仅适用于保存为 .py 的笔记本电脑(这也是问题所涉及的内容),而不是一般从 .py 转换为 .ipynb 的转换机制。 - Pani

6

ipynb-py-convert

按照以下步骤,您可以获得 .ipynb 文件:

安装 "pip install ipynb-py-convert" 通过命令提示符进入保存有 py 文件的目录 输入以下命令

ipynb-py-convert YourFileName.py YourFilename.ipynb

例如:. ipynb-py-convert getting-started-with-kaggle-titanic-problem.py getting-started-with-kaggle-titanic-problem.ipynb

上述命令将创建一个名为“YourFileName.ipynb”的 python 脚本,根据我们的示例,它将创建文件 getting-started-with-kaggle-titanic-problem.ipynb


工作得很好,无问题地转换了.py文件。 - Elmar

2
如果py文件从一开始就是py格式,改名可能不起作用。最简单的方法可能是从PowerShell运行以下脚本:
  1. 安装ipynb-py-convert:

    pip install ipynb-py-convert

  2. 跳转到您的目录级别

    cd "YOUR_DIRECTORY_PATH"

  3. 递归转换所有文件(包括所有子目录):

    foreach ($f in Get-ChildItem "." -Filter *.py -Recurse){ ipynb-py-convert $f.FullName "$($f.FullName.Substring(0,$f.FullName.Length-3)).ipynb"}

干杯!

1

安装 jupytext 包 (# pip install jupytext)

import jupytext
notebook = jupytext.read('example.py')
jupytext.write(notebook, 'example.ipynb', fmt='.ipynb')

0
如果您希望应用于项目目录中所有以 .py 结尾的文件的转换,可以在批处理文件中运行以下命令:
for /r %%v in (*.py) do p2j "%%v" 

-1
jupytext --to notebook <name_of_script_file>.py

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接