【发布时间】:2021-07-05 04:30:05
【问题描述】:
问题有点长,请多多包涵。
我正在尝试从电子邮件正文中删除不必要的文本,并仅保留第一封电子邮件的正文(问候语之后和签名之前的文本)。
以下是电子邮件示例。
电子邮件:
email = """Hi John,
I am emailing regarding REQ-12345 and REQ-66442.
Many Thanks,
Jane
Analyst | XYZ LLC.
Phone: +00 123 456 7890
Email: Jane.Doe@xyzmail.com
"""
我使用splitlines 和startswith 方法检查每一行的关键字,我想使用这些关键字来决定包含或排除一行的天气。
代码:
flag = []
greet = []
for i in range(len(email.splitlines())):
if email.splitlines()[i].lower().startswith('many thanks'):
flag.append(False)
else:
flag.append(True)
if email.splitlines()[i].lower().startswith('hi') or email.splitlines()[i].lower().startswith('hello'):
greet.append(False)
else:
greet.append(True)
df = pd.DataFrame({'line': email.splitlines(), 'signature_flag': flag, 'greet': greet})
df
给出以下数据框:
我创建了一个名为countX 的函数来检查一个值在列表中出现的次数。
def countX(lst, x):
count = 0
for ele in lst:
if (ele == x):
count = count + 1
return count
使用countX 函数,我试图创建一个列,如果signature_flag 或greet 列是False,它应该标记为False,如果False 出现在@ 987654335@ 两次,然后第二次False 之后的任何内容都是False。然后我可以删除所有 False 行,剩下的就是我需要的文本。
final_flag = []
for i in range(len(df)):
flag = (df['signature_flag'][i] == True & df['greet'][i] == True)
if countX(final_flag[0:i], False) <= 2:
final_flag.append(flag)
else:
final_flag.append(False)
df['final_flag'] = final_flag
df
但是,这并没有按预期工作。
我如何让它工作?
谢谢。
【问题讨论】:
-
给定数据帧的预期输出是什么?