背景:我正在尝试编写一个函数,该函数可以从我从PDF转换成的纯文本文档中解析消息数据。我已经解析并清理了数据,直到方便为止,以便识别出相关文本的每一行并用适当的类别标记。类别为(Author, Sent, Body, Attachments)
。
问题:我正在尝试编写一个将数据分离为单独消息的函数。例如,在处理了属于每个类别的一条线(或多条线)之后,它将输出一条奇异的消息,并在再次遇到元组的开头时重复该过程。换句话说,一旦它先读Author
然后读Sent
然后读Body
然后读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?
我的直觉告诉我,我需要创建一个递归函数来完成此操作,但是我碰壁了,想出一些办法。谁能指出我正确的方向?
非常感谢。