Я пытаюсь экспортировать два кадра данных Pandas в один и тот же файл Excel на разных листах.
Код ниже работает нормально, но размер создаваемого файла составляет 0 КБ. Когда я пытаюсь открыть его в Excel, я получаю сообщение: «Excel не может открыть файл myfile.xlsx, поскольку формат или расширение файла недопустимы. Убедитесь, что файл не поврежден и что расширение файла соответствует формату файла. файл":
V_writer = pd.ExcelWriter("myfile.xlsx", mode = 'w')
V_df_1.to_excel(V_writer, sheet_name = "df_1", index = False)
V_df_2.to_excel(V_writer, sheet_name = "df_2", index = False)
Однако следующий код работает отлично:
with pd.ExcelWriter("myfile.xlsx", mode = 'w') as V_writer:
V_df_1.to_excel(V_writer, sheet_name = "df_1", index = False)
V_df_2.to_excel(V_writer, sheet_name = "df_1", index = False)
Может ли кто-нибудь объяснить, почему это так, пожалуйста? Имя файла и расширение файла одинаковы в каждом фрагменте кода и используются одни и те же параметры, поэтому я не понимаю, почему один создает недопустимый файл, а другой — нет.
Вам необходимо закрыть файл, чтобы правильно записать изменения и сделать его действительным:
V_writer = pd.ExcelWriter("myfile.xlsx", mode = 'w')
V_df_1.to_excel(V_writer, sheet_name = "df_1", index = False)
V_df_2.to_excel(V_writer, sheet_name = "df_2", index = False)
V_writer.close()
Оператор with
делает это автоматически за вас (путем вызова метода __exit__
, который не делает ничего, кроме запуска close
):
V_writer.__exit__??
Source:
def __exit__(
self,
exc_type: type[BaseException] | None,
exc_value: BaseException | None,
traceback: TracebackType | None,
) -> None:
self.close()