Сохраните данные на новой вкладке в файле .xlsx

Моя программа генерирует data_list с помощью цикла while (код для создания data_list не важен, основной код я приложил ниже). В конце цикла, после создания data_list, я хочу записать этот data_list в файл test.xlsx. Однако каждый новый data_list должен сохраняться в новой вкладке (то есть, если бы у меня было 10 итераций в цикле, в файле test.xlsx было бы 10 разных вкладок).

На данный момент мой код работает так, что каждая новая вкладка перезаписывает предыдущую, то есть в конце цикла в файле test.xlsx остается одна вкладка.

Подскажите, как сделать так, чтобы каждый новый сгенерированный data_list писался в новой вкладке.

start=0
finish=1
datas = response.json()


while finish < 11:
    data = datas[start:finish]

    data_list = []
    # some code for generating the data_list

    df = pd.DataFrame(data_list)
    writer = pd.ExcelWriter('test.xlsx')
    df.to_excel(writer, sheet_name=f'{finish}', index=False)
    writer._save()

    finish +=1
    start +=1

Я перемещаю writer = pd.ExcelWriter('test.xlsx') перед петлей while. затем переместите writer.close() после цикла while, я увидел 10 вкладок, сохраненных в «test.xlsx» после запуска кода....

rachel 23.06.2024 09:12

Да, writer = pd.ExcelWriter('test.xlsx') каждый раз будет создавать новый «test.xlsx», так что перезаписывается не вкладка, а вся книга на каждой итерации.

moken 23.06.2024 09:17
stackoverflow.com/questions/74646115/…
Bera 23.06.2024 10:00

Еще один очень простой способ исправить это, не меняя никакого кода: удалить xlsxwriter. тогда pandas будет использовать openpyxl в качестве движка, который будет использовать существующий файл Excel вместо того, чтобы создавать новый файл и перезаписывать старый с тем же именем.

rachel 23.06.2024 10:05
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
4
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вместо сохранения каждого листа используйте with, чтобы создать ExcelWriter.

with pd.ExcelWriter('test.xlsx') as writer:
    while finish < 11:
        data = datas[start:finish]

        data_list = []

        df = pd.DataFrame(data_list)
        df.to_excel(writer, sheet_name=f'{finish}', index=False)

        finish += 1
        start += 1

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