-1

我正在编写一个脚本来自动通过网站发送 SMS 消息。我正在使用MechanizeBeautifulSoup 4来执行此操作。

该程序通过从命令行调用它并将数字和消息作为参数传递来工作;为此,我正在使用Optparse

消息通过命令行传递给程序,但网站每条 SMS 消息只接受 444 个字符。所以我正在尝试执行以下操作:

  • 确定消息字符串的长度(包括空格)和 IF 大于 444 则...
  • 遍历 while 循环,该循环获取临时消息字符串并将总消息字符串的前 444 个字符从索引 0 附加到列表对象,直到临时消息字符串的长度不再大于 444
  • 然后通过使用列表对象中的项目数,我将遍历一个 For Loop 块,该块循环处理发送消息,其中每次迭代对应于 444 个字符串的索引(总消息的拆分)和我' 将把 444 个字符的消息片段放在适当的 HTML 表单字段中,并使用 Mechanize 作为要发送的消息(希望这是可以理解的!)

到目前为止我写的代码如下:

message = "abcdefghijklmnopqrstuvwxyz..." # imagine it is > 444 characters
messageList = []
if len(message) > 444:
    tmpMsgString = message
    counter = 0
    msgLength = len(message)

    while msgLength > 444:
        messageList.append(tmpMsgString[counter:counter+445]) # 2nd index needs to point to last character's position in the string, not "counter+445" because this would cause an error when there isn't enough characters in string?
        tmpMsgString = tmpMsgString[counter+445:msgLength])
        msgLength = msgLength-444
        counter = counter + 444
else:
    messageList.append(message)

我可以管理代码的一部分以接受来自命令行的参数,我还可以通过循环来管理 for 循环块并使用列表中的每个项目作为要发送的消息,但是我几乎没有 Python 经验而且我需要一双有经验的眼睛来帮助我完成这部分代码!所有帮助表示赞赏。

4

2 回答 2

4

包括电池。这使用 44 个字符,用于演示目的。结果列表可以很容易地被迭代。另外,它在单词边界处拆分,而不是任意拆分。

>>> import textwrap
>>> s = "lorem ipsum" * 20
>>> textwrap.wrap(s, width=44)
['lorem ipsumlorem ipsumlorem ipsumlorem', 'ipsumlorem ipsumlorem ipsumlorem ipsumlorem', 'ipsumlorem ipsumlorem ipsumlorem ipsumlor
em', 'ipsumlorem ipsumlorem ipsumlorem ipsumlorem', 'ipsumlorem ipsumlorem ipsumlorem ipsumlorem', 'ipsum']
于 2013-09-25T20:01:47.813 回答
2

如果您需要做的只是将字符串拆分为 444 个字符的块,则不需要计数器或复杂的东西。以下是更新当前代码的方法:

message = "whatever..."*1000
tmp = message
msgList = []
while tmp:
    msgList.append(tmp[:444])
    tmp = tmp[444:]

这将起作用,因为超出序列范围的切片将被截断到序列的末尾(不会IndexError引发 s)。如果整个切片超出范围,则结果将为空。

您可以使用列表推导更好地做到这一点:

message = "whatever"*1000
msgList = [message[i:i+444] for i in range(0, len(message), 444)]
于 2013-09-25T20:01:58.920 回答