import pandas as pd | |
def load_excel(file): | |
df = pd.read_excel(file) | |
return file, df | |
def run_code(file, code): | |
scope = {'pd': pd} | |
if file: | |
print('file ok') | |
df = pd.read_excel(file) | |
scope['df'] = df | |
try: | |
exec(code, scope, scope) | |
except Exception as e: | |
scope['new_df'] = df | |
return scope['new_df'], f"# ERROR: {str(e)}" | |
# print(scope.keys()) | |
if 'new_df' not in scope: | |
print("new_df not defined") | |
scope['new_df'] = df.copy() | |
new_df = scope['new_df'] | |
return new_df, "" | |
else: | |
print("No file provided") | |
return pd.DataFrame(), "No file provided" | |
# def run_code_and_update_ui(file, code): | |
# df, error_msg = run_code(file, code) # This is your updated run_code function. | |
# # Now, check if there's an error message and handle it appropriately. | |
# if error_msg: | |
# # You can update some error display component in Gradio here to show the error_msg. | |
# # Assuming you have a gr.Textbox to display errors: | |
# error_display.update(value=f"Error in code execution: {error_msg}") | |
# # Ensure you still return the original DataFrame or an empty one to satisfy the expected output type. | |
# return df | |
# else: | |
# # If no error, clear the error display and return the DataFrame as usual. | |
# error_display.update(value="") | |
# return df | |
def export_df(df, filename): | |
filename = filename.replace('.xlsx', '_coded.xlsx') | |
df.to_excel(filename, index=False) | |
return filename | |