使用多个条件创建递归Python函数
背景:我正在尝试编写一个函数,用于解析从PDF转换而来的纯文本文档中的消息数据。我已经对数据进行了解析和清理,以便于识别相关文本的每一行,并用适当的类别进行标记。类别为使用多个条件创建递归Python函数,python,recursion,Python,Recursion,背景:我正在尝试编写一个函数,用于解析从PDF转换而来的纯文本文档中的消息数据。我已经对数据进行了解析和清理,以便于识别相关文本的每一行,并用适当的类别进行标记。类别为(作者、已发送、正文、附件) 问题是:我正在尝试编写一个函数,将数据分离成单独的消息。例如,在处理属于每个类别的一行(或多行)之后,它将输出一条单一消息,然后在再次遇到元组的开头时重复该过程。换句话说,一旦它读到作者然后发送然后正文然后附件,当它再次看到作者时,它应该知道启动一条新消息 我已经创建了一个变量next\u categ
(作者、已发送、正文、附件)
问题是:我正在尝试编写一个函数,将数据分离成单独的消息。例如,在处理属于每个类别的一行(或多行)之后,它将输出一条单一消息,然后在再次遇到元组的开头时重复该过程。换句话说,一旦它读到作者
然后发送
然后正文
然后附件
,当它再次看到作者
时,它应该知道启动一条新消息
我已经创建了一个变量next\u 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?
我的直觉告诉我,我需要创建一个递归函数来实现这一点,但我在想办法时遇到了困难。谁能给我指出正确的方向吗
非常感谢。为什么您觉得需要再次出现?另外,你的输入数据是什么样的?迭代并解决这个问题,这实际上不需要递归。我同意@Paritossingh,这不是递归问题,而是解析问题。而且,这种类型的数据可以很好地作为CSV使用,这将使解析变得更容易。@Mad物理学家对我来说,递归的感觉是,我需要在类别列表中循环,执行操作,然后在所有类别都出现一次后停止,并在一组新的行上再次执行相同的操作,并不断重复,直到满足最终条件。原始输入是一个转换成文本的PDF文档。听起来像是一个循环,而不是递归。虽然这两者可以互换使用,但我认为您不希望创建可能无限多的堆栈帧。