首页 > 解决方案 > 创建具有多个条件的递归 Python 函数

问题描述

背景:我正在尝试编写一个函数,从我从 PDF 转换的纯文本文档中解析消息数据。我已经将数据解析并清理到一个方便的点,以便识别每一行相关文本并用适当的类别标记。类别是(Author, Sent, Body, Attachments)

问题:我正在尝试编写一个函数,将数据分离成单独的消息。例如,在它处理了属于每个类别的一行(或多行)之后,它会输出一个单一的消息,然后在再次遇到元组的开头时重复该过程。换句话说,一旦它读取Authorthen Sentthen Bodythen Attachments,当它再次看到Author时,它应该知道开始一条新消息。

next_category顾名思义,我创建了一个变量来确定即将到来的行的类别。只要即将到来的类别的索引不是0,该功能就应该运行。当下一个类别是0时,它应该在新的行上重复操作,直到0再次到达,依此类推。

最后,有一个条件next_category可以相等None,在这种情况下函数应该完全退出。

编码:

    def message_parse(thread_dict):
        categories = ('Author', 'Sent', 'Body', 'Attachments')
        category = None


        for line in range(len(thread_dict['data'])):
            # determine first word in line
            first_word = thread_dict['data'][line].split(' ')[0]

            try:
                # determine first word in upcoming line
                next_first = first_word = thread_dict['data'][line+1].split(' ')[0]
            except:
                next_first = None

            if next_first in categories:
                next_category = next_first

            if first_word in categories:
                category = first_word


                if category != None:
                    line_data = thread_dict['data'][line]
                    if not 'DRAFT' in line_data:
                        if line_data != 'EXC':
                            line_data = line_data.strip(category).strip(' ')

                        while next_first != None:    
                            if categories.index(next_category) != 0:
                                # do something?

我的直觉告诉我,我需要创建一个递归函数来完成此任务,但我试图想出一些东西却碰壁了。谁能指出我正确的方向?

非常感谢。

标签: pythonrecursion

解决方案


推荐阅读