#python
Вопрос:
Я использую функцию, позволяющую моему пользователю открывать файл нажатием кнопки.
def open():
global img
file = filedialog.askopenfilename(filetypes =(("Text File", "*.txt"),("All Files","*.*")), title = "Select")
txt = []
with open(file, "r", encoding='utf-8') as f:
[...]
outputData = pd.DataFrame(txt)
return txt
После этого, нажав другую кнопку, также следует начать некоторый анализ с использованием pandas, но как я могу использовать фрейм данных, который я создаю в этой функции ниже?
def analyze():
total = len(outputData)
Это ошибка, которую я получаю: «Ошибка: Ошибка имени: имя ‘OutputData’ не определено»
После того, как кто-то нажмет кнопку «Анализ», я хотел бы также отобразить результат в «total_label», чтобы его мог видеть мой пользователь.
sel_btn = Button(frame, command=open)
an_btn = Button(frame, command=analyze)
total_label = Label(frame, textvariable='total')
sel_btn.pack()
an_btn.pack()
total_label.pack()
Спасибо!
РЕДАКТИРОВАТЬ Я все еще получаю некоторую ошибку, вот эту: «Ошибка типа: analyze_chat() отсутствует 1 требуемый позиционный аргумент: ‘OutputData'»
Это мой полный код
def open():
global img
file = filedialog.askopenfilename(filetypes =(("Text File", "*.txt"),("All Files","*.*")), title = "Select Chat")
txt = []
exclude_string = "Tap for more info."
with open(file, "r", encoding='utf-8') as f:
for line in f:
lines = line.split(' - ') # Divide between date and the rest
if len(lines) > 1:
if not lines[1].__contains__(exclude_string):
lines2 = lines[1].split(': ') # Divide between user and text
if len(lines2) > 1:
sender = lines2[0]
text = lines2[1]
time = lines[0]
txt = [[time, sender, text]]
outputData = pd.DataFrame(txt, columns=['datetime', 'sender', 'text'])
outputData.to_csv('output2.csv', index=False, line_terminator='n', encoding='utf-8')
analyze(outputData)
select_btn['command']=0
select_btn.config(image=step1_2_img, relief=SUNKEN)
analyze_btn.config(image=step2_2_img)
return txt
def analyze(outputData):
total = len(outputData)
Комментарии:
1. Поскольку ваша ошибка связана со ссылкой
analyze_chat
, которой нет в вашем коде, я предполагаю, что это не абсолютно все, вы проверили, есть лиanalyze_chat
требуемый аргумент?2. Измените текст своей этикетки, сделав это
total_label.config(text=analysis)
Ответ №1:
def open():
[code_here]
outputData = pd.DataFrame(txt)
analyze(outputData) #this basically passes the variable to the function
и в функции анализа
def analyze(outputData):
total = len(outputData)
так что для более легкого понимания
def first():
passme = 'text'
second(passme)
def second(passme):
print(passme)
Это позволит печатать текст во второй функции
Переменная передается и вызывается
Надеюсь, это поможет, я тоже учусь
ОТРЕДАКТИРУЙТЕ Приведенный ниже код
analyze(outputData)
select_btn['command']=0
select_btn.config(image=step1_2_img, relief=SUNKEN)
analyze_btn.config(image=step2_2_img)
return txt
в
select_btn['command']=0
select_btn.config(image=step1_2_img, relief=SUNKEN)
analyze_btn.config(image=step2_2_img)
return txt
analyze(outputData)
или
select_btn['command']=0
select_btn.config(image=step1_2_img, relief=SUNKEN)
analyze_btn.config(image=step2_2_img)
analyze(outputData, txt)
def analyze(outputData, txt):
[YOUR CODE HERE]
Комментарии:
1. ПРИМЕЧАНИЕ: обучение передаче материала через функции
2. Спасибо, я попробовал ваше решение. Но я все еще получаю ошибку. Я отредактировал свой вопрос, надеясь, что будет легче понять, что я делаю не так
3. в настоящее время вы получаете «Ошибка типа: analyze_chat() отсутствует 1 требуемый позиционный аргумент: ‘OutputData'», потому что вы не передаете выходные данные в analyze_chat()
4. попробуйте поместить
analyze(outputData)
нижеreturn txt
5. @DianaMele проверьте мой ответ еще раз и попробуйте это, и если это не сработает, попробуйте удалить
return txt
, затем изменитьanalyze(outputData)
наanalyze(outputData, txt)
, а затем добавитьtxt
вdef analyze(outputData):
лайкdef analyze(outputData, txt):