Найти ключевые слова в ячейках Jupyter и запустить (проблема одновременных запусков)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Найти ключевые слова в ячейках Jupyter и запустить (проблема одновременных запусков)

Сообщение Anonymous »

**Изменить: это работает только в Jupyter 6.1.5.
Я успешно создал несколько функций, которые ищут введенные ключевые слова (они могут быть комментариями, кодами). , уценки или необработанные коды) внутри текущего файла jupyter ipynb и запускайте все ячейки, содержащие эти ключевые слова. Я доволен своей работой, но есть одна проблема: запуск ячеек с помощью команды Javascript внутри цикла одновременно запускает выбранные ячейки. Это не проблема для небольших процессов, но я считаю, что это может вызвать проблемы для тяжелых процессов. Есть ли у кого-нибудь предложения о том, как сделать эти прогоны последовательными и упорядоченными, чтобы каждый прогон ждал завершения предыдущего прогона? Кроме того, если у кого-то есть лучшее представление о поиске и запуске ячеек Jupyter с ключевыми словами, я ценю ваше предложение.
Мои коды содержат две ячейки Jupyter (ячейка A и B), для которых создается виджет Jupyter. введите ключевые слова и функции для: 1) чтения файла ipynb (используя библиотеку ipynbname, вам необходимо установить ее с помощью pip install ipynbname), 2) ключевые слова для поиска (

Код: Выделить всё

kwsearch
функция), 3)[/b] индексировать каждую ячейку Jupyter, читая файл ipynb (

Код: Выделить всё

cell_indices
, последний индекс в cell_indices соответствует текущему номеру ячейки кода) и 4) соединяет индексы ключевых слов с соответствующими индексами ячеек (

Код: Выделить всё

indice_matcher
).
Ячейка B запускает функции ячейки A для любого обновленного значения внутри виджета ввода текста и запускает полученные ячейки в цикле. Единственная причина, по которой ячейки A и B должны быть разделены, заключается в том, что запуск ячейки A приведет к обновлению текстового виджета до значений по умолчанию (становится пустым), следовательно, другая ячейка должна вызывать измененные входные данные и функции.
Ниже введите ячейку A:

Код: Выделить всё

### trying to make Jupyter ipynb to run cells containing especial keywords
# cell A >> preparing functions and the input widget
# kw is short form of keyword(s)

import numpy as np
import codecs
import ipynbname  #pip install ipynbname
from IPython.display import Javascript, display
import ipywidgets as widgets
from ipywidgets import Layout, Textarea

ID = '5oG9gNy7myn/k86/+/8cemphdkEsK237SjQltj2GZGU=' # unique ID for finding current code cell number inside ipynb file

def indice_matcher(j01,j02): # if positive difference of j02[n] and j01[n] is less than j01[n] and j01[+1] then they have matching indices
'''j01 has the bigger range '''
jj = []
for j1 in range(len(j01)-1):
for j2 in range(len(j02)):
if j02[j2] - j01[j1] < j01[j1+1] - j01[j1] and j02[j2] - j01[j1] > 0:
jj.append(j1)

return jj  # returns list indices of matched indices

def kwsearch(x,char):  # x is the big string and char is the small string
f = 0
i = []
f = x.find(char)
i.append(f)
while f != -1:
f = x[i[-1]+1:].find(char)
i.append(f+1+i[-1])

return i[:-1] # returns all indices of ONE searched character inside x string

def flat(lis):
''' # Converts a nested list into a flat list;
source : https://www.geeksforgeeks.org/python-convert-a-nested-list-into-a-flat-list/'''
flatList = []
# Iterate with outer list
for element in lis:
if type(element) is list:
# Check if type is list than iterate through the sublist
for item in element:
flatList.append(item)
else:
flatList.append(element)
return flatList

def kwrun(kw_string):
kw_string.append(ID)
N = len(kw_string)
# nb_fname = ipynbname.name()  # current ipynb file's name
nb_path = ipynbname.path()  # current ipynb file's path
f=codecs.open(nb_path, 'r')
current_ipynb = f.read()

kw_indices = [] # indices of all inputted keywords
for n in range(N): # the loop repeats itself till N keywords are searched
kw_indices.append(kwsearch(current_ipynb,kw_string[n]))

cell_indices = kwsearch(current_ipynb,'"cell_type"')   # searching "cell_type" inside ipynb file helps us to find indices for all cells
# calculating selected cell number
cell_n = []
for n in range(N): # the loop repeats till N kewords are searched
cell_n.append(indice_matcher(cell_indices,kw_indices[n]))  # returns list of cell numbers that should be run ; # cell numbers in this way is equal to cell_indices' number of each index
cell_n = flat(cell_n)
print(f'Running Cells: {cell_n[:-1]} \n current code cell number: {cell_n[-1]}')
return cell_n

## making the text widget
tw = widgets.Text(description='Keywords')

mylayout = Layout(width='51px', height='30px', border = '2px solid blue')

button1 = widgets.Button(description="Run!", layout=mylayout)
### VERY IMPORTANT: the Run button only works if you place Cell B as the second cell in your jupyter-notebook.
### You can change index value [1] to any other cell index value you placed Cell B in but you can't define a variable outside function on_button_clicked
output = widgets.Output()

# display()

def on_button_clicked(b):
with output:
display(Javascript(f'IPython.notebook.execute_cells([1])'))

button1.on_click(on_button_clicked)

GridBox(children=[tw, button1],
layout=Layout(
grid_template_rows='0px 30px',
grid_template_columns='300px 0px',
grid_gap='10px 10px',
grid_template_areas='''
"tl tl"
"tl tl"
'''
))

И ниже коды представляют ячейку B:

Код: Выделить всё

# cell B >> search and run
cell_n = kwrun((w1.value).split()) # tw.value is value of inputted words inside cell 1 widget; the keywords should be separated by space
for n in range(len(cell_n)-1): # the -1 in range removes loops to run current code cell number (cell A)
display(Javascript(f'IPython.notebook.execute_cells([{str(cell_n[n])}])')) #if a name is not found, no cell will be run
После запуска ячейки A один раз для создания виджета, введя любое желаемое ключевое слово, запустите ячейку B (или просто нажмите кнопку «Выполнить» для ячейки A, если вы разместили ячейку B к правильному индексу ячейки, определенному в функции on_button_clicked ячейки A). При этом будут выполняться ячейки, содержащие введенные ключевые слова, но позже может возникнуть проблема с тем, что они выполняются одновременно.
Несколько заключительных соображений: если вы используете приведенные выше коды, выбирайте длинные уникальные непромежуточные коды. строки для нужных ячеек. Если ключевые слова повторяются в разных ячейках, все эти ячейки будут запущены одновременно.
Эти функции помогают запускать необходимые ячейки Jupyter в начале каждой работы, запоминая наиболее важное ключевое слово в каждой ячейке. . например, я использую ключевое слово «#.NPY» для загрузки ячейки, которая загружает мой исходный набор данных, как показано ниже:
[img]https:// i.sstatic.net/z1wBeow5.png[/img]

Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/787 ... anous-runs
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Блокнот Anaconda Jupyter отображает и удаляет ключевые слова
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Почему в ячейках Jupyter Notebook есть левые поля?
    Гость » » в форуме Python
    0 Ответы
    51 Просмотры
    Последнее сообщение Гость
  • Как найти все встроенные функции и зарезервированные ключевые слова в коде Python?
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Как найти ключевые слова в MySQL с помощью хранимой процедуры. Я использую PHP, но это занимает слишком много времени
    Anonymous » » в форуме Php
    0 Ответы
    92 Просмотры
    Последнее сообщение Anonymous
  • Как найти информацию в соседних ячейках, объединить документ doxc ячейки с Python
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»