我正在用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)
谢谢!
我会把 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
.