Я пытался создать свой первый интерфейс в 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['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 и распечатывает его содержимое, и он работает безупречно. Итак, я предполагаю, что это как-то связано с обработкой выходного_файла. Возможно, нет.
Чтобы воспроизвести: поместите любой файл 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
Подробнее здесь: https://stackoverflow.com/questions/786 ... ter-must-b