Create main.py
Browse files
main.py
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import pandas as pd
|
2 |
+
import gradio as gr
|
3 |
+
|
4 |
+
def convert_schedule(file, direction):
|
5 |
+
# Read the uploaded Excel file; use the first column as index
|
6 |
+
df = pd.read_excel(file.name if hasattr(file, 'name') else file, index_col=0)
|
7 |
+
|
8 |
+
if direction == "A to B":
|
9 |
+
# A->B: models in rows, texters in cells -> texters as rows, models as cell values
|
10 |
+
df_reset = df.reset_index()
|
11 |
+
model_col = df_reset.columns[0]
|
12 |
+
df_melt = df_reset.melt(id_vars=[model_col], var_name='Header', value_name='Texter')
|
13 |
+
df_melt = df_melt.dropna(subset=['Texter'])
|
14 |
+
df_pivot = df_melt.pivot(index='Texter', columns='Header', values=model_col)
|
15 |
+
df_pivot = df_pivot.reindex(columns=df.columns).fillna("")
|
16 |
+
result = df_pivot
|
17 |
+
else:
|
18 |
+
# B->A: texters in rows, models in cells -> models as rows, texters as cell values
|
19 |
+
df_reset = df.reset_index()
|
20 |
+
texter_col = df_reset.columns[0]
|
21 |
+
df_melt = df_reset.melt(id_vars=[texter_col], var_name='Header', value_name='Model')
|
22 |
+
df_melt = df_melt.dropna(subset=['Model'])
|
23 |
+
df_pivot = df_melt.pivot(index='Model', columns='Header', values=texter_col)
|
24 |
+
df_pivot = df_pivot.reindex(columns=df.columns).fillna("")
|
25 |
+
result = df_pivot
|
26 |
+
|
27 |
+
# Save to Excel for download
|
28 |
+
out_file = "converted_schedule.xlsx"
|
29 |
+
result.to_excel(out_file)
|
30 |
+
return result, out_file
|
31 |
+
|
32 |
+
# Build Gradio interface
|
33 |
+
iface = gr.Interface(
|
34 |
+
fn=convert_schedule,
|
35 |
+
inputs=[
|
36 |
+
gr.File(label="Upload Schedule Excel (Format A or B)"),
|
37 |
+
gr.Radio(["A to B", "B to A"], label="Conversion Direction")
|
38 |
+
],
|
39 |
+
outputs=[
|
40 |
+
gr.Dataframe(label="Converted Schedule"),
|
41 |
+
gr.File(label="Download Converted Excel")
|
42 |
+
],
|
43 |
+
title="Schedule Format Converter",
|
44 |
+
description="Dynamically convert between two schedule formats: models-as-rows ↔ texters-as-rows."
|
45 |
+
)
|
46 |
+
|
47 |
+
if __name__ == "__main__":
|
48 |
+
iface.launch()
|