我正在编写一个脚本来自动通过网站发送短信。我正在使用 Mechanize 和 BeautifulSoup 4 来执行此操作。
该程序通过从命令行调用它并将数字和消息作为参数传递来工作;为此,我使用 Optparse 。
邮件通过命令行传递给程序,但网站每条短信只接受444个字符。所以我想尝试以下方法:
到目前为止我写的代码如下:
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经验,我需要一双经验丰富的眼睛来帮助我这部分代码!所有帮助表示赞赏。
答案 0 :(得分: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']
答案 1 :(得分: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)]