Tengo el siguiente código ejecutándose en 4 celdas diferentes:

Celda1:

import pandas as pd
import numpy as np
import os
reference = pd.read_excel(argument1,sheet_name=argument2,na_values='0',converters={'SID': '{:0>12}'.format}) #reference file path
reference.replace('',np.nan,inplace=True)
reference.dropna(how='all',inplace = True)
reference.drop([0],inplace=True)

Cell2:

reference=reference[reference['SType']==argument']

Cell4:

path = argument4
file_list = os.listdir(path)

for i in file_list:
    filename = os.path.join(path, i)
    #ori_df = pd.read_excel(filename)
    df = pd.read_excel(filename)
    cond = pd.Index(df.iloc[0]).intersection(reference.columns)
    df1 = reference[cond].copy()
    #df1.loc[-1] = df1.columns
    d = dict(zip(df.iloc[0], df.columns))
    df1 = df1.sort_index().rename(columns=d)
    x = df1.iloc[:,1:].columns
    df1.dropna(axis=0,how='all',subset=x,inplace=True)
    if len(cond) > 1:
        df1.to_excel(filename,index = False)
    else:
        os.remove(filename)

Quiero saber si hay alguna manera de que pueda guardar este código como un archivo .py y hacerlo ejecutable simplemente pasando los argumentos como una línea de comando dentro de las celdas de jupyter. ¿Está permitido en el cuaderno Jupyter? en caso afirmativo, hágamelo saber cómo.

** Lo siento si estoy siendo ignorante aquí, intenté investigar un poco sobre esto, pero no pude obtener ninguna información.

1
anky 16 oct. 2018 a las 11:28

2 respuestas

La mejor respuesta

Simplemente use la opción nbconvert --to script.

jupyter-nbconvert --to script path/to/your/notebook.ipynb  

No podrá pasar argumentos personalizados usando la línea de comando, que necesitará una mayor personalización del script generado.

Documentación relevante

Convierta un cuaderno en un script ejecutable. Esta es la forma más sencilla de obtener un script de Python (u otro lenguaje, según el kernel) de un cuaderno. Si hubiera magia en un cuaderno de Jupyter, es posible que solo se pueda ejecutar desde una sesión de Jupyter.

2
Kamil Niski 16 oct. 2018 a las 15:02

Tuve la misma pregunta no hace mucho tiempo ^^

No estoy seguro de que mi respuesta sea lo que esperabas, pero así es como lo hice:

Digamos que sus archivos son así:

+
|  my_notebook.ipynb
| + folder1
| | my_script.py

Y supongamos que tiene una función run_script() en el archivo my_script.py

Entonces puedes simplemente hacer:

import folder1.my_script as ms

ms.run_script()

Para poder llamar a su script como paquete / módulo, debe crear un archivo __init__.py vacío en el lugar correcto. Entonces su árbol debería ser como:

+
|  __init__.py
|  my_notebook.ipynb
| + folder1
| |  __init__.py
| | my_script.py
1
Astariul 16 oct. 2018 a las 08:40