Ошибка градиента: TypeError: аргумент gradio.data_classes.FileData() после ** должен быть сопоставлением, а не списком

Я пытался создать свой первый интерфейс в Gradio, когда получил эту ошибку: «Ошибка Gradio: TypeError: Аргумент gradio.data_classes.FileData() после ** должен быть сопоставлением, а не списком» (Полная ошибка находится под блоком кода) ).

import gradio as gr
from time import sleep
import pandas as pd
import random

css = """
.custom-file-input {
    height: 50px;
}
"""

with gr.Blocks(css=css) as ui:
    gr.Markdown(value='#### File for analysis:')
    
    with gr.Row():
        file_input = gr.File(label = "Excel or CSV file", elem_classes = "custom-file-input", file_count=1)
        analyze_button = gr.Button("Analyze", scale=0)
    
    gr.Markdown(value='### Progress:')
    progress_output = gr.Markdown()
    
    status_text = gr.Textbox(interactive=False, show_label=False, visible=True)
    
    result_file = gr.File(label = "Result", interactive=False)
    
    @analyze_button.click(inputs=file_input)
    def process_file(file):
    
        # Simulate file processing and progress updates
        progress = gr.Progress()
        progress(0, desc='0%')
        
        df = pd.read_excel(file.name)
        n_lines = df.shape[0]
        
        for i in range(n_lines):
            # sleep(0.01)  # Simulate some processing time
            df.iloc[i]['Target'] = random.choice(['MOROCCO', 'PRODUCT SKI', 'FINANCE', 'DOMESTIC'])
            progress((i + 1) / n_lines, desc=f'{int((i + 1) / n_lines * 100)}%')

        progress(1, desc='100%')
        
        output_file = "processed_file.xlsx"
        
        df.to_excel(output_file, index=False)
        

ui.launch()

Честно говоря, я не знаю, что попробовать, потому что для меня это новая библиотека. Я попытался создать простой градиентный интерфейс, который читает файл Excel и распечатывает его содержимое, и он работает безупречно. Итак, я предполагаю, что это как-то связано с обработкой output_file, вероятно. Возможно, нет.

Чтобы воспроизвести: поместите любой файл Excel с несколькими строками текста в интерфейс градиента и нажмите кнопку «Анализ» справа от него.

Полная ошибка

Traceback (most recent call last):
  File "C:\Users\abaxt\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\gradio\queueing.py", line 532, in process_events
    response = await route_utils.call_process_api(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\abaxt\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\gradio\route_utils.py", line 276, in call_process_api
    output = await app.get_blocks().process_api(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\abaxt\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\gradio\blocks.py", line 1924, in process_api
    inputs = await self.preprocess_data(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\abaxt\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\gradio\blocks.py", line 1653, in preprocess_data
    inputs_cached = block.data_model(**inputs_cached)  # type: ignore
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: gradio.data_classes.FileData() argument after ** must be a mapping, not list

всегда помещайте ПОЛНОЕ сообщение об ошибке (начиная со слова «Traceback») в вопросе (не в комментариях) в виде текста (не скриншота и не ссылки на внешний портал). В полной версии ошибки/трассировки есть и другая полезная информация. Кроме того, вопрос станет более читабельным, и его сможет увидеть больше людей, поэтому больше людей смогут помочь.

furas 26.06.2024 03:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вся проблема в том file_count=1

В документации к файлу показаны допустимые значения:

  • file_count = "single" (значение по умолчанию)
  • file_count = "multiple"
  • file_count = "directory"

Итак, вам нужно

file_input = gr.File(label = "Excel or CSV file", elem_classes = "custom-file-input", file_count = "single")

или вы даже можете пропустить file_count = "single", потому что это значение по умолчанию

file_input = gr.File(label = "Excel or CSV file", elem_classes = "custom-file-input")

Вот и все.


КСТАТИ:

Позже вам потребуются небольшие изменения.

В функции вам нужно outputs, чтобы отобразить индикатор выполнения:

@analyze_button.click(inputs=file_input, outputs=progress_output)

Если хочешь загрузить csv, то надо бежать read_csv

if file.name.endswith('csv'):
    df = pd.read_csv(file.name)
else:
    df = pd.read_excel(file.name)

Другие вопросы по теме