文章目录

  • 前言
  • 1、直接读写
  • 2、冷静分析
  • 3、正确操作
  • 4、效果

前言

为了将python代码放在jupyter notebook上运行,人工处理需要耗费大量时间,考虑到以后数据量增多,自动化脚本处理撒必要的。

1、直接读写

可能很多人起初和我想的一样,不就是更改个后缀名吗,有那么复杂,直接读一下然后存一下不就好了。

test.py中的内容:

# %%
'''
# 这是个测试
'''# %%
def twoSum(nums, target):cache = {}i = 0while i < len(nums):right = target-nums[i]if cache.get(right) is not None:return [cache[right], i]else:cache[nums[i]] = ii += 1return []

于是我开始了如下尝试:

with open('test.py', 'r', encoding='utf8') as f:code = f.read()
with open('test1.ipynb', 'w', encoding='utf8') as f:f.write(code)

so easy ???
于是,打开test1.ipynb

出乎意料,竟然报错了,不应该啊这。

2、冷静分析

于是我随便找了个正常的.ipynb文件
打开后发现是个JSON格式的文件,用CSDN插件的JSON工具打开,如图:

cell字段被我折叠起来了,展开看下:

从此处可以发现,ipynb格式的文件,代码都是以列表的形式存储在cells字段的source字段里面,根本不是改个后缀名那么简单。
而我们要做的,就是要构造一个这样的JSON格式,才能正确地将.py文件转为.ipynb格式。
此时,如果想将.ipynb转为.py,将cell_type=code作为代码cell_type=markdown作为注释拼接起来就好了。

3、正确操作

前面思路已经捋清楚了,直接看代码吧

import json
import sys
from os import pathheader_comment = '# %%\n'def nb2py(notebook):result = []cells = notebook['cells']for cell in cells:cell_type = cell['cell_type']if cell_type == 'markdown':result.append("%s'''\n%s\n'''" %(header_comment, ''.join(cell['source'])))if cell_type == 'code':result.append("%s%s" % (header_comment, ''.join(cell['source'])))return '\n\n'.join(result)def py2nb(py_str):# remove leading header commentif py_str.startswith(header_comment):py_str = py_str[len(header_comment):]cells = []chunks = py_str.split('\n\n%s' % header_comment)for chunk in chunks:cell_type = 'code'if chunk.startswith("'''"):chunk = chunk.strip("'\n")cell_type = 'markdown'cell = {'cell_type': cell_type,'metadata': {},'source': chunk.splitlines(True),}if cell_type == 'code':cell.update({'outputs': [], 'execution_count': None})cells.append(cell)notebook = {'cells': cells,'metadata': {'anaconda-cloud': {},'kernelspec': {'display_name': 'Python 3','language': 'python','name': 'python3'},'language_info': {'codemirror_mode': {'name': 'ipython', 'version': 3},'file_extension': '.py','mimetype': 'text/x-python','name': 'python','nbconvert_exporter': 'python','pygments_lexer': 'ipython3','version': '3.8.8'}},'nbformat': 4,'nbformat_minor': 1}return notebookdef convert(in_file, out_file):_, in_ext = path.splitext(in_file)_, out_ext = path.splitext(out_file)if in_ext == '.ipynb' and out_ext == '.py':with open(in_file, 'r') as f:notebook = json.load(f)py_str = nb2py(notebook)with open(out_file, 'w') as f:f.write(py_str)elif in_ext == '.py' and out_ext == '.ipynb':with open(in_file, 'r') as f:py_str = f.read()notebook = py2nb(py_str)with open(out_file, 'w') as f:json.dump(notebook, f, indent=2)else:raise(Exception('Extensions must be .ipynb and .py or vice versa'))if __name__ == '__main__':src_python_path = 'test.py'dst_python_path = 'test.ipynb'convert(in_file=src_python_path, out_file=dst_python_path)

4、效果


将第一个cell 里右下角的python改成markdown,运行一下就能看到预期的效果了

.py文件与.ipynb文件互相转换相关推荐

  1. py文件和ipynb文件互相转换

    一.jupyter notebook里ipynb文件转为py文件 方法一: 在xxx.ipynb所在目录下,打开终端,并输入命令: 1 jupyter nbconvert --to script xx ...

  2. .py文件和.ipynb文件

    以.py和.ipynb为后缀的文件都是用Python语音编写的源代码文件.其实就类似于word文档的后缀,有.dox也有.docx. 两者的区别在于:.py文件时标准的Python源代码文件,可以用S ...

  3. 如何在Jupyter notebook中运行python的.py文件,以及ipynb文件与py文件的相互转化

    文章目录: 1 Jupyter notebook中%开头的一些方法使用 1.1 运行python的py文件 1.2 加载本地文件 2 ipynb文件与py文件的相互转化 2.1 jupyter not ...

  4. ipynb pycharm 运行_有关如何运行.ipynb文件的图形说明

    Python中__ init__. py文件的功能的详细说明 __ init__.py文件的功能是将文件夹更改为Python模块. 在Python中每个模块的软件包中,都有一个__init__.py文 ...

  5. Python批量ipynb文件转(另存为)pdf

    遇到的问题:尝试使用jupyter notebook直接下载成pdf,但是缺少相关包,没有成功.试过wxhtmltopdf,问题出在ipynb转html之后,html文件中包含图片,但是转成pdf之后 ...

  6. 如何将ipynb文件转换转换为py文件?

    在git上抓到了ipynb文件如何转换成.py文件并运行? step1:pip install jupyter step2:在cmd中跳到ipynb文件路径下,运行jupyter notebook,运 ...

  7. jupyter调用py文件_解决Jupyter notebook中.py与.ipynb文件的import问题

    在jupyter notebook中,因为其解析文件的方式是基于json的,所以其默认保存的文件格式不是.py而是.ipynb.而.ipynb文件并不能简单的import进.py或者.ipynb文件中 ...

  8. py和ipynb文件互相转化

    py和ipynb文件互相转化 ipynb转py py转ipynb 越来越多使用python人投入了jupyter notebook的怀抱,比如我哈哈.单元型运行,随时保存输出中间变量结果,方便的输出展 ...

  9. Jupyter notebook中.py与.ipynb文件的import问题

    在jupyter notebook中,因为其解析文件的方式是基于json的,所以其默认保存的文件格式不是.py而是.ipynb.而.ipynb文件并不能简单的import进.py或者.ipynb文件中 ...

最新文章

  1. 人工智能灵魂注入,燃烧你的卡路里——2018,你AI了吗!?
  2. 为 Jupyter Notebook指定虚拟环境的 Python 解释器
  3. Hyperledger Fabric权限进阶篇
  4. 以太坊ERC20代币合约案例
  5. 使用IOUtils和FileUtils
  6. java里不支持post请求_java – Spring Boot – 不支持请求方法’POST’
  7. Zabbix添加监控项及配置邮件报警
  8. NoSQL--Redis 2.4--Set
  9. 关于RAID磁盘阵列与阵列卡的介绍 —— 做一个懂它的男人
  10. 如何手动启动消防广播_消防应急广播应如何规范设置
  11. Android支付宝刷步数,支付宝刷步数教程(手机免ROOT)
  12. Android加载服务器的静态图片文件
  13. 苹果手机如何下载考拉解析app
  14. Google的秘密通道
  15. 磁感应强度、磁场强度、磁动势之三者间的关系
  16. 根式进入计算机的方法
  17. Tushare简单的数据使用以及mysql存储教程
  18. 逆序的三位数(取余,加减乘除)[C语言/C++]
  19. 五分钟理解什么是接口
  20. 二十一世纪大学英语读写教程(第二册)学习笔记(原文)——6 - A Brief History of Stephen Hawking(斯蒂夫·霍金简传)

热门文章

  1. java中换行字符怎么用?
  2. 数据还能再低点?SuperData显示2016年VR出货量为630万台
  3. 2014秋季新款韩版潮流女装黑白拼色气质一字领打底收腰显瘦连衣裙F506
  4. 输入底面半径和高,求圆柱体的表面积
  5. 【产业互联网周报】硅谷多家IT大厂组成现代计算联盟,提供企业云上服务;台积电新封装技术2023年投产...
  6. python 画高程图像
  7. 网络程序设计——VC的多线程编程(线程与进程)
  8. json 解析 转java对象数组对象数组对象_json字符串转java对象数组
  9. 邦纳传感器M18TUP8Q
  10. DSP-FTU实现DNP3.0