簡體   English   中英

在while循環中分割字符串並追加到列表

[英]Splitting string in while loop and appending to list

我正在研究一個腳本,以通過網站自動發送SMS消息。 我正在使用MechanizeBeautifulSoup 4來執行此操作。

該程序通過從命令行調用它並傳遞數字和消息作為參數來工作。 為此,我正在使用Optparse

該消息是通過命令行傳遞給程序的,但該網站每條SMS消息僅接受444個字符。 因此,我嘗試執行以下操作:

  • 確定消息字符串的長度(包括空格),如果IF大於444,則...
  • 循環執行while循環,該循環獲取臨時消息字符串,並將總消息字符串的前444個字符從索引0追加到列表對象,直到臨時消息字符串的長度不再大於444
  • 然后通過使用列表對象中的項目數,我將遍歷一個For Loop塊,該塊循環遍歷發送消息的處理,其中每次迭代都對應於444個字符串的索引(占總消息的數量),而I會將這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經驗,我需要一雙經驗豐富的眼睛來幫助我與代碼的這一部分一起! 所有幫助表示贊賞。

包括電池。 出於演示目的,它使用了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']

如果您需要做的只是將字符串分成444個字符的塊,則不需要計數器或復雜的東西。 您可以通過以下方式更新當前代碼:

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

這將起作用,因為跨越序列范圍的片段將被截斷到序列的末尾(不會引發IndexError )。 如果整個切片超出范圍,則結果為空。

使用列表理解,您也許可以做得更好:

message = "whatever"*1000
msgList = [message[i:i+444] for i in range(0, len(message), 444)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM