Конвертировать лабораторную тетрадь jupyter в сценарий без добавления комментариев и новых строк между ячейками - PullRequest
0 голосов
/ 24 января 2019

Как я могу преобразовать jupyter lab блокнот в *.py без каких-либо пустых строк и комментариев, добавленных в скрипт при конвертации (например, # In[103]:)? В настоящее время я могу конвертировать, используя jupyter nbconvert --to script 'test.ipynb', но это добавляет пустые строки и комментарии между ячейками блокнота.

Ответы [ 2 ]

0 голосов
/ 01 августа 2019

Просто модификация, чтобы ответить здесь https://stackoverflow.com/a/54035145/8420173 командой args

 #!/usr/bin/env python3
 import sys
 import json
 import argparse

 def main(files):
    for file in files:
        print('#!/usr/bin/env python')
        print('')
        code = json.load(open(file))
        for cell in code['cells']:
            if cell['cell_type'] == 'code':
                for line in cell['source']:
                    if not line.strip().startswith("#") and not line.isspace():
                        print(line, end='')
                print('\n')
if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('file',nargs='+',help='Path to the file')
    args_namespace = parser.parse_args()
    args = vars(args_namespace)['file']
    main(args)

Запишите следующее содержимое в файл MyFile.py, затем

chmod +x MyFile.py

ThisКак это сделать, чтобы получить код из IPython Notebooks в соответствии с вашими требованиями.

./MyFile path/to/file/File.ipynb > Final.py
0 голосов
/ 26 января 2019

На данный момент jupyter не предоставляет такую ​​функциональность по умолчанию.Тем не менее, вы можете вручную удалить пустые строки и комментарии из файла Python, используя несколько строк кода, например

def process(filename):
    """Removes empty lines and lines that contain only whitespace, and
    lines with comments"""

    with open(filename) as in_file, open(filename, 'r+') as out_file:
        for line in in_file:
            if not line.strip().startswith("#") and not line.isspace():
                out_file.writelines(line)

Теперь просто вызовите эту функцию в файле Python, который вы конвертировали из блокнота jupyter.

process('test.py')

Кроме того, если вы хотите, чтобы одна служебная функция конвертировала блокнот jupyter в файл python, в котором нет комментариев и пустых строк, вы можете включить приведенный выше код в предложенную ниже функцию здесь :

import nbformat
from nbconvert import PythonExporter

def convertNotebook(notebookPath, out_file):
    with open(notebookPath) as fh:
        nb = nbformat.reads(fh.read(), nbformat.NO_CONVERT)

    exporter = PythonExporter()
    source, meta = exporter.from_notebook_node(nb)

    with open(out_file, 'w+') as out_file:
        out_file.writelines(source)

    # include above `process` code here with proper modification
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...