【问题标题】:how to append a list in a while loop to the same list in python - selenium如何将while循环中的列表附加到python中的同一列表中 - selenium
【发布时间】:2022-01-20 17:21:24
【问题描述】:

简而言之,我的问题是我想从“n”个邮箱中获取收到的消息并将邮箱(及其消息)一个接一个地附加到彼此,然后我想作为数据帧打印到一个excel文件。 (例如 n =5)

mailbox_list = ['mailbox_1','mailbox_2','mailbox_3','mailbox_4','mailbox_5']

这是我的代码,适用于一个邮箱的内容:

i = 0  # starting number of mailboxes
while i < len(mailbox_list): # I want to get messages for all mailboxes one by one 
    try:
        # get the message content 
        rm_content = driver.find_element(By.XPATH, '//*[@id="content"]/messages/div[2]/div/div/table')
        time.sleep(1)
        messages = (rm_content.text.split('\n')) # these are the messages 
        print('Messages found')
        
        # add these messages to a list
        msg_list = [messages[i:i + 3] for i in range(2, len(messages), 3)]  
        # (!!!) this list contains the messages for 1 mailbox that I want to append to the next item in the while loop
        
        # use a dataframe for messages
        df_msg_list = pd.DataFrame(msg_list)
        df_msg_list.columns = ['Sender', 'Content', 'Date']
        df_msg_list[['Inbox', 'Query_Date']] = pd.DataFrame([[get_key(f'{mailbox_list[i]}'), date]], index=df_msg_list.index)
        print(df_msg_list)

        # write into excel
        writer = pd.ExcelWriter(messages_excel, engine='xlsxwriter')
        df_msg_list.to_excel(writer, sheet_name=f'{date[0:10]}', header=True, index=False)
        writer.save()
        
    except NoSuchElementException:
        pass # exception handling
        print('No messages found')
    
    i=i+1

有人可以帮助我如何将 msg_list 附加到 while 循环中的下一项(下一个 msg_list)吗?

【问题讨论】:

    标签: python dataframe selenium xlsxwriter


    【解决方案1】:

    您可以定义并保留一些全局变量,我们将其称为循环外的total_msg_list,并将循环中的当前msg_list 附加到该全局变量。
    像这样的:

    total_msg_list = []
    i = 0  # starting number of mailboxes
    while i < len(mailbox_list): # I want to get messages for all mailboxes one by one 
        try:
            # get the message content 
            rm_content = driver.find_element(By.XPATH, '//*[@id="content"]/messages/div[2]/div/div/table')
            time.sleep(1)
            messages = (rm_content.text.split('\n')) # these are the messages 
            print('Messages found')
            
            # add these messages to a list
            msg_list = [messages[i:i + 3] for i in range(2, len(messages), 3)]  
            total_msg_list.append(msg_list)
            
            # use a dataframe for messages
            df_msg_list = pd.DataFrame(msg_list)
            df_msg_list.columns = ['Sender', 'Content', 'Date']
            df_msg_list[['Inbox', 'Query_Date']] = pd.DataFrame([[get_key(f'{mailbox_list[i]}'), date]], index=df_msg_list.index)
            print(df_msg_list)
    
            # write into excel
            writer = pd.ExcelWriter(messages_excel, engine='xlsxwriter')
            df_msg_list.to_excel(writer, sheet_name=f'{date[0:10]}', header=True, index=False)
            writer.save()
            
        except NoSuchElementException:
            pass # exception handling
            print('No messages found')
        
        i=i+1
    #now, after the loop completed you can see the final content of total_msg_list
    print(total_msg_list)
    

    【讨论】:

    • 谢谢@Prophet,它成功了。我尝试了类似的解决方案,但直到这次才顺利:)
    猜你喜欢
    • 2021-10-31
    • 2017-02-11
    • 1970-01-01
    • 2019-01-12
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    相关资源
    最近更新 更多