@35000sobak

Как правильно вывести все содержимое массива в файл?

Есть такой код на питоне, хотел вывести все содержимое в консоль, но там текст не умещается, поэтому пришлось писать содержимое в файл. Но в файл записывается только последний элемент списка, а вывести нужно все 121. Как это сделать? буду очень благодарен
i = 0
while(i <= 121):
    val = "elif call.data == \"f{0}\": \n \
        FILTER[user_id] = '{1}' \n \
        msg = bot.send_message(call.message.chat.id, \"Выбран стиль {0}.\") \n \
        bot.register_next_step_handler(msg, load) \n \
        bot.edit_message_reply_markup(call.message.chat.id, call.message.message_id, reply_markup = None) \n  \
    ".format(i, list[i+1])
    f1 = open("D:/text1.txt", 'w')
    f1.write(val)
    i += 1
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Вы перезаписываете файл каждый раз, передавая аргумент 'w'. Конечно, будет только последняя строка
f1 = open("D:/text1.txt", 'w')

s = 'elif call.data == "f{0}": \n \
            FILTER[user_id] = \'{1}\' \n \
            msg = bot.send_message(call.message.chat.id, "Выбран стиль {0}.") \n \
            bot.register_next_step_handler(msg, load) \n \
            bot.edit_message_reply_markup(call.message.chat.id, call.message.message_id, reply_markup = None) \n  \
        '

with open('D:/text1.txt', 'a') as f:
    for i, value in enumerate(list[1:]):
        f.write(s.format(i, value))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@deliro
Открывать файл на каждую строчку — очень затратная операция. Не говоря о том, что ты его даже не закрываешь, что потенциально приведёт к недозаписи. Правильно работать с файлами через контекстные менеджеры:

i = 0

with open("D:/text1.txt", "w") as f1:
    while i <= 121:
        val = 'elif call.data == "f{0}": \n \
            FILTER[user_id] = \'{1}\' \n \
            msg = bot.send_message(call.message.chat.id, "Выбран стиль {0}.") \n \
            bot.register_next_step_handler(msg, load) \n \
            bot.edit_message_reply_markup(call.message.chat.id, call.message.message_id, reply_markup = None) \n  \
        '.format(
            i, list[i + 1]
        )
        f1.write(val)
        i += 1
Ответ написан
@fire_engel
вместо w в open поставь a

в данном случае w перезаписывает файл. a -- флаг для добавления содержимого.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы