У меня есть скрипт в записной книжке Jupyter, который работает нормально, и сейчас я пытаюсь создать небольшую программу без необходимости постоянно открывать Jupyter. Я хочу щелкнуть по .exe, а затем загрузить файл, выбрать несколько фильтров для двух столбцов данных и вывести результат в Windows (если это также может работать на MA C, это было бы здорово).
Сначала я преобразую файл ноутбука в файл .py:
pip install nbconvert
jupyter nbconvert --to script my_notebook.ipynb
Затем я использую файл .py для преобразования в файл .exe
pip install pyinstaller
pyinstaller my_notebook.py
Или
pyinstaller.exe --onefile my_notebook.py
ПРИМЕЧАНИЕ. В случае, если Python3 не работает с pyinstaller, попробуйте следующее:
pip uninstall pyinstaller
pip install https://github.com/pyinstaller/pyinstaller/tarball/develop
Мой полный сценарий в файле .py:
import tkinter as tk
from tkinter import filedialog
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename()
print(file_path)
import pandas as pd
import datetime
from datetime import datetime as dt
df = pd.read_csv(file_path, parse_dates=["Date"], error_bad_lines=False)
df = df[df['ColumnA'] == 'ValueA']
df = df[df['Date'] == '11/11/2019']
df = df[df['Column2'].str.find("25961999") != -1]
df.head()
Я пытался отдельно передать значения, как правило, в переменную в Jupyter с помощью следующего:
import tkinter as tk
root = tk.Tk()
entry_text1 = tk.StringVar()
entry1 = tk.Entry(root, width=10, textvariable=entry_text1)
entry1.pack()
entry_text2 = tk.StringVar()
entry2 = tk.Entry(root, width=10, textvariable=entry_text2)
entry2.pack()
button = tk.Button(root, text='Click Me', command=lambda: mhello(entry_text1,entry_text2))
button.pack()
label_text = tk.StringVar()
label = tk.Label(root, textvariable=label_text)
label.pack()
def mhello(var1,var2):
mtext1=var1.get()
mtext2=var2.get()
print(mtext1)
print(mtext2)
root.mainloop()
, и это работает. Мне удалось загрузить файл, добавить фильтры, необходимые для столбцов данных, и у него есть некоторые проблемы. Это не всегда работает:
import tkinter as tk
from tkinter import filedialog
import pandas as pd
import datetime
from datetime import datetime as dt
root = tk.Tk()
#Load csv file from Windows
file_path = filedialog.askopenfilename() #'C:/Users/Radomer/Documents/#PYTHON/output_1.csv'
#Add first filter
entry_text1 = tk.StringVar()
entry1 = tk.Entry(root, width=10, textvariable=entry_text1)
entry1.pack()
#Add second filter
entry_text2 = tk.StringVar()
entry2 = tk.Entry(root, width=10, textvariable=entry_text2)
entry2.pack()
button = tk.Button(root, text='Click Me', command=lambda: mhello(entry_text1,entry_text2))
button.pack()
label_text = tk.StringVar()
label = tk.Label(root, textvariable=label_text)
label.pack()
def mhello(var1,var2):
mtext1=var1.get()
mtext2=var2.get()
#print(mtext1)
#print(mtext2)
#Filter loaded data stream based on the input values for the column values (date, field contains string)
df = pd.read_csv(file_path, parse_dates=['Date'], error_bad_lines=False)
df = df[df['ColumnA'] == mtext1]
df = df[df['Date'] == mtext2]
df = df[df['Column2'].str.find('25961999') != -1]
print(df)
root.withdraw()
root.mainloop()
Это работает, только если я закрою Jupyter и снова открою. Это почему? Нужно ли что-то менять с помощью root?