【问题标题】:Sending the output of Prettytable to Telegram将 Prettytable 的输出发送到 Telegram
【发布时间】:2021-10-15 10:20:02
【问题描述】:

我有以下代码:

从漂亮表导入漂亮表

myTable = PrettyTable(["Student Name", "Class", "Section", "Percentage"])
  
# Add rows
myTable.add_row(["Leanord", "X", "B", "91.2 %"])
myTable.add_row(["Penny", "X", "C", "63.5 %"])
myTable.add_row(["Howard", "X", "A", "90.23 %"])
myTable.add_row(["Bernadette", "X", "D", "92.7 %"])
myTable.add_row(["Sheldon", "X", "A", "98.2 %"])
myTable.add_row(["Raj", "X", "B", "88.1 %"])
myTable.add_row(["Amy", "X", "B", "95.0 %"])

这会生成一个如下所示的表格:

+--------------+-------+---------+------------+
| Student Name | Class | Section | Percentage |
+--------------+-------+---------+------------+
|   Leanord    |   X   |    B    |   91.2 %   |
|    Penny     |   X   |    C    |   63.5 %   |
|    Howard    |   X   |    A    |  90.23 %   |
|  Bernadette  |   X   |    D    |   92.7 %   |
|   Sheldon    |   X   |    A    |   98.2 %   |
|     Raj      |   X   |    B    |   88.1 %   |
|     Amy      |   X   |    B    |   95.0 %   |
+--------------+-------+---------+------------+

我想在不更改电报消息格式的情况下准确地发送此表。所以我把它写到一个文本文件中:

table_txt = table.get_string()
with open('output.txt','w') as file:
    file.write(table_txt)

接下来我使用这个代码:

import telegram

def send_msg(text):
    token = "******************:***********"
    chat_id = "********"
    bot = telegram.Bot(token=token)
    for i in text:
        bot.sendMessage(chat_id=chat_id, text=i)
new_list = []
with open("output.txt", 'r', encoding="utf-8") as file:
     new_list = file.read()
for i in new_list:
     send_msg()

它的作用是一次发送 1 个字符的文件内容,直到收到电报错误:

RetryAfter:超出防洪控制。 43.0 秒后重试

请告知我该怎么做才能解决这个问题?

【问题讨论】:

  • 为什么一次发送一个字符?为什么不逐行发送或在一条消息中发送整个表格?
  • 这就是我希望得到一些帮助

标签: python python-3.x telegram telegram-bot


【解决方案1】:

我不是 python 开发人员,但我认为这会起作用。

import telegram

def send_msg(text):
    token = "******************:***********"
    chat_id = "********"
    bot = telegram.Bot(token=token)
        bot.sendMessage(chat_id=chat_id, text=text)

with open("output.txt", 'r', encoding="utf-8") as file:
     send_msg(file.read())

【讨论】:

    【解决方案2】:

    问题在于这段代码:

    for i in text:
        bot.sendMessage(chat_id=chat_id, text=i)
    

    您不是在发送文本,而是在对文本进行迭代。通过这样做,您可以获得整个字符串的子字符串,每个子字符串只包含一个字符:

    text = "hello"
    outputs = []
    for i in text:
        outputs.append(i)
    assert outputs == ['h', 'e', 'l', 'l', 'o']
    
    for i in text:
        print(i)
    # h
    # e
    # l
    # l
    # o
    

    要解决此问题,您可以改为发送整个字符串:

    bot.sendMessage(chat_id=chat_id, text=text)
    

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多