如何用python-telegram-bot在列表中每10个项目输出消息到聊天机器人。

问题描述 投票:0回答:1

我正在用python-telegram-bot包编写一个Telegram机器人。我想用python-telegram-bot输出一个存储搜索结果的列表给聊天机器人。有时搜索结果超过4000多个字符,不允许输出。所以我想把结果分开发送,如果列表中的项目超过10个,我想让它在每条消息中发送10个项目。到目前为止,我现在可以通过聊天机器人输出我想要的4000多个字符的格式,但是我不知道如何让它变成每条消息10个项目?我查了一下slice,但它似乎只对列表有效,但python-telegram-bot只输出文本。由于学校日期是字典,我也试着在 "text = "Searching result:/n"" & "for i, school_data in enumerate(search_result): ",也是在这个for循环之后,一直重复最后一个循环或者重复个别行;用了split()(想从修改后的文本中修剪),但会把输出格式搞乱。

这是我一直以来理想的项目输出格式。

university_name: blablabla
department: blablabla
staff_name: blablabla
ranking: blablabla
specialisation: blablabla
website: blablabla
-----
university_name: blablabla
department: blablabla
staf_name: blablabla
ranking: blablabla
specialisation: blablabla
website: blablabla
------
.
.
.

这是无论列表中有多少项,我都能打印出来的代码。

        search_result = []

        for items in data["staffs"]:
            specialisation = items["staff_specialisation"]
            if keyword in specialisation:
                search_result.append({"university_name": items["university"], "department": items["department"], "staff_name": items["staff_name"], "ranking": items["ranking"], "specialisation": items["staff_specialisation"], "website": items["website"]})

        text = "Searching result:\n"
        for i, school_data in enumerate(search_result):
            for key in school_data:
                text += "\n" + "{}:{}".format(key, school_data[key])
            text += "\n------"

        update.message.reply_text(text)

谢谢!

python telegram chatbot python-telegram-bot
1个回答
1
投票

我会把 reply_text() 里面 if item%10==9: 当你在迭代的时候。有了 %10 (模数 10)你会每10个循环做一些事情。为什么是9?因为枚举是从0开始的,同时也是在 if 将在每个循环的最后)。)

但是如果项目列表不是10的倍数,它会让你有一些项目没有显示。例如,如果你的项目列表有28个项目,你会显示前10个项目,后10个项目,仅此而已,你会错过最后8个项目。要解决这个问题,最好的办法是使用 if item%10==9 or item==len(itemlist)-1:所以 if 也会检查您是否在搜索结果的最后一项,并执行最终的 reply_text()

text = "Searching result:\n"
for i, school_data in enumerate(search_result):
    for key in school_data:
        text += "\n" + "{}:{}".format(key, school_data[key])
    text += "\n------"
    if i%10==9 or i==len(search_result)-1:
        update.message.reply_text(text)
        text = "Searching result:\n"

在这个特殊的例子中,if子句在第一个for循环中,也就是在search_result上迭代的那个子句。同样的道理也适用于我们在 if.

© www.soinside.com 2019 - 2024. All rights reserved.