我有一个如下列表,
['Message-ID: <5525962.1075855679785.JavaMail.evans@thyme>\r\n',
'Date: Wed, 13 Dec 2000 07:04:00 -0800 (PST)\r\n',
'From: phillip.allen@enron.com\r\n',
'To: christi.nicolay@enron.com, james.steffes@enron.com, jeff.dasovich@enron.com, \r\n',
'\tjoe.hartsoe@enron.com, mary.hain@enron.com, pallen@enron.com,\r\n',
'\tpkaufma@enron.com, richard.sanders@enron.com, \r\n',
'\trichard.shapiro@enron.com, stephanie.miller@enron.com, \r\n',
'\tsteven.kean@enron.com, susan.mara@enron.com, \r\n',
'\trebecca.cantrell@enron.com\r\n',
'Subject: \r\n',
'Mime-Version: 1.0\r\n']
该To
属性仅包含3个电子邮件ID,其后是一些元素,这些元素以\t
开头。实际上,这些\t
列出了To
属性的延续元素。我的目标是要合并To
属性中所有缺少的元素。
到目前为止,我已经使用以下代码解决了我的问题。
l=['Message-ID: <5525962.1075855679785.JavaMail.evans@thyme>\r\n',
'Date: Wed, 13 Dec 2000 07:04:00 -0800 (PST)\r\n',
'From: phillip.allen@enron.com\r\n',
'To: christi.nicolay@enron.com, james.steffes@enron.com, jeff.dasovich@enron.com, \r\n',
'\tjoe.hartsoe@enron.com, mary.hain@enron.com, pallen@enron.com,\r\n',
'\tpkaufma@enron.com, richard.sanders@enron.com, \r\n',
'\trichard.shapiro@enron.com, stephanie.miller@enron.com, \r\n',
'\tsteven.kean@enron.com, susan.mara@enron.com, \r\n',
'\trebecca.cantrell@enron.com\r\n',
'Subject: \r\n',
'Mime-Version: 1.0\r\n']
act= [ele.rstrip('\r\n') for ele in l if ele.startswith('To: ')]
rem=[ele.lstrip('\t').rstrip('\r\n') for ele in l if ele.startswith('\t')]
act.extend(rem)
act=[''.join(act)]
l=[ele for ele in l if not ele.startswith('To: ') and not ele.startswith('\t')]
l.extend(act)
print l
输出:
['Message-ID: <5525962.1075855679785.JavaMail.evans@thyme>\r\n',
'Date: Wed, 13 Dec 2000 07:04:00 -0800 (PST)\r\n',
'From: phillip.allen@enron.com\r\n',
'Subject: \r\n',
'Mime-Version: 1.0\r\n',
'To: christi.nicolay@enron.com, james.steffes@enron.com, jeff.dasovich@enron.com, joe.hartsoe@enron.com, mary.hain@enron.com, pallen@enron.com,pkaufma@enron.com, richard.sanders@enron.com, richard.shapiro@enron.com, stephanie.miller@enron.com, steven.kean@enron.com, susan.mara@enron.com, rebecca.cantrell@enron.com']
我认为我使代码变得更加复杂。
有没有简单的方法或任何其他更好的方法来解决此问题? 或在哪里可以提高代码效率?
任何努力都是非常有意义的。
谢谢。
答案 0 :(得分:2)
您正在解析电子邮件,因为存在很多极端情况,所以这非常棘手。您应该查看python email module,以避免出现许多陷阱。
import email
headers = ['Message-ID: <5525962.1075855679785.JavaMail.evans@thyme>\r\n',
'Date: Wed, 13 Dec 2000 07:04:00 -0800 (PST)\r\n',
'From: phillip.allen@enron.com\r\n',
'To: christi.nicolay@enron.com, james.steffes@enron.com, jeff.dasovich@enron.com, \r\n',
'\tjoe.hartsoe@enron.com, mary.hain@enron.com, pallen@enron.com,\r\n',
'\tpkaufma@enron.com, richard.sanders@enron.com, \r\n',
'\trichard.shapiro@enron.com, stephanie.miller@enron.com, \r\n',
'\tsteven.kean@enron.com, susan.mara@enron.com, \r\n',
'\trebecca.cantrell@enron.com\r\n',
'Subject: \r\n',
'Mime-Version: 1.0\r\n']
mail = email.message_from_string("".join(headers)+"\r\n"+"foo body") # rebuild mail message and parse
for to in email.utils.getaddresses(mail.get_all("to")):
print(to[1])
生产
christi.nicolay@enron.com
james.steffes@enron.com
jeff.dasovich@enron.com
joe.hartsoe@enron.com
mary.hain@enron.com
pallen@enron.com
pkaufma@enron.com
richard.sanders@enron.com
richard.shapiro@enron.com
stephanie.miller@enron.com
steven.kean@enron.com
susan.mara@enron.com
rebecca.cantrell@enron.com
答案 1 :(得分:2)
我认为'\ r','\ t'和'\ n'字符是多余的,应将其删除。
虽然我不知道你有什么打算,我还是可以建议
将其转换为字典,以备将来使用。
m_list = ['Message-ID: <5525962.1075855679785.JavaMail.evans@thyme>\r\n',
'Date: Wed, 13 Dec 2000 07:04:00 -0800 (PST)\r\n',
'From: phillip.allen@enron.com\r\n',
'To: christi.nicolay@enron.com, james.steffes@enron.com, jeff.dasovich@enron.com, \r\n',
'\tjoe.hartsoe@enron.com, mary.hain@enron.com, pallen@enron.com,\r\n',
'\tpkaufma@enron.com, richard.sanders@enron.com, \r\n',
'\trichard.shapiro@enron.com, stephanie.miller@enron.com, \r\n',
'\tsteven.kean@enron.com, susan.mara@enron.com, \r\n',
'\trebecca.cantrell@enron.com\r\n',
'Subject: \r\n',
'Mime-Version: 1.0\r\n']
m_dict = {}
for m in m_list:
m = m.split(':', maxsplit=1)
if len(m) > 1:
key, value = m[0], m[1]
m_dict[key] = value.strip()
else:
m_dict['To'] = m_dict['To'] + ' ' + m[0].strip()
print(m_dict)
输出:
{'Message-ID': '<5525962.1075855679785.JavaMail.evans@thyme>', 'Date': 'Wed, 13 Dec 2000 07:04:00 -0800 (PST)', 'From': 'phillip.allen@enron.com', 'To': 'christi.nicolay@enron.com, james.steffes@enron.com, jeff.dasovich@enron.com, joe.hartsoe@enron.com, mary.hain@enron.com, pallen@enron.com, pkaufma@enron.com, richard.sanders@enron.com, richard.shapiro@enron.com, stephanie.miller@enron.com, steven.kean@enron.com, susan.mara@enron.com, rebecca.cantrell@enron.com', 'Subject': '', 'Mime-Version': '1.0'}
答案 2 :(得分:1)
对于您的给定问题,这将是一个更简单易懂的解决方案-
arr=['Message-ID: <5525962.1075855679785.JavaMail.evans@thyme>\r\n',
'Date: Wed, 13 Dec 2000 07:04:00 -0800 (PST)\r\n',
'From: phillip.allen@enron.com\r\n',
'To: christi.nicolay@enron.com, james.steffes@enron.com, jeff.dasovich@enron.com, \r\n',
'\tjoe.hartsoe@enron.com, mary.hain@enron.com, pallen@enron.com,\r\n',
'\tpkaufma@enron.com, richard.sanders@enron.com, \r\n',
'\trichard.shapiro@enron.com, stephanie.miller@enron.com, \r\n',
'\tsteven.kean@enron.com, susan.mara@enron.com, \r\n',
'\trebecca.cantrell@enron.com\r\n',
'Subject: \r\n',
'Mime-Version: 1.0\r\n']
reqd_array=[]
k=""
for i in arr:
if ':' in i:
reqd_array.append(i.strip())
else:
k=k+i.strip()
for i,j in enumerate(reqd_array):
if j.startswith("To:"):
reqd_array[i]=reqd_array[i]+k
break
print(reqd_array)