我有有以下记录的文件。这表示组“名称:电子邮件添加”
Group1: it@group.foobar.com, Group1: it@group.foobar.com
Group2: man@foobar.com, Group2: man@foobar.com
Group3: xyz@foobar.com, test-grp: yz@foobar.com, grp-t: new@foobar.com, test-contract: new_g@foobar.com, grp0: ij@foobar.com, grp8: turu@foobar.com
Group_test: iu@foobar.com, gvgrp: in@foobar.com, rsgrp: ij@foobar.com, dev: mp@foobar.com, rs: uru@foobar.com 假设第一个字段:email是supergrpup,其他是嵌套组,这意味着
次组:
Group1: it@group.foobar.com
Group2: man@foobar.com
Group3: xyz@foobar.com
Group_test: iu@foobar.com 分组:
Group1: it@group.foobar.com
Group2: man@foobar.com
test-grp: yz@foobar.com, grp-t: new@foobar.com, test-contract: new_g@foobar.com, grp0: ij@foobar.com, grp8: turu@foobar.com
gvgrp: in@foobar.com, rsgrp: ij@foobar.com, dev: mp@foobar.com, rs: uru@foobar.com现在,我想发送电子邮件给这些组地址(用“:”分隔)
但是电子邮件应该发送给超级组及其相应的子组。
就像行:
Group3: xyz@foobar.com, test-grp: yz@foobar.com, grp-t: new@foobar.com, test-contract: new_g@foobar.com, grp0: ij@foobar.com, grp8: turu@foobar.com 它应该将电子邮件发送到超级组电子邮件和所有子组的电子邮件地址,并在电子邮件正文中使用他们的群名。
To: xyz@foobar.com, yz@foobar.com, new@foobar.com, new_g@foobar.com,
ij@foobar.com, turu@foobar.com
Body:
Failed because of groupnames : Group3, test-grp, grp-t, test-contract,
grp0, grp8 ---------> These are all group associated with email specified
in "To":我不知道我该怎么做?我试着写字典,但又一次不管用.
如果有人能帮我个忙,那会有很大的帮助吗?
非常感谢鲍勃
发布于 2018-03-14 21:56:10
可以使用regex和group解析字符串以创建嵌套字典列表:
import re
s = """
Group1: it@group.foobar.com, Group1: it@group.foobar.com
Group2: man@foobar.com, Group2: man@foobar.com
Group3: xyz@foobar.com, test-grp: yz@foobar.com, grp-t: new@foobar.com, test-contract: new_g@foobar.com, grp0: ij@foobar.com, grp8: turu@foobar.com
Group_test: iu@foobar.com, gvgrp: in@foobar.com, rsgrp: ij@foobar.com, dev: mp@foobar.com, rs: uru@foobar.com
"""
listings = [re.findall('[a-zA-Z0-9\-\_]+(?=:\s)|(?<=:\s)[a-zA-Z0-9@\._]+', i) for i in filter(None, s.split('\n'))]
new_groups = [{**{i[0]:i[1]}, **{'subgroups':dict([(i[2:][b], i[2:][b+1]) for b in range(0, len(i)-2, 2)])}} for i in listings]
def get_flattened_listing(d):
return [i for b in [[b] if not isinstance(b, dict) else get_flattened_listing(b) for a, b in d.items()] for i in b]
def send_email(structure, body='Testing new system'):
yield from ['To: {}\n\nBody: {}'.format(', '.join(get_flattened_listing(i)), body) for i in structure]
for message in send_email(new_groups):
print(message)
print('-'*10)输出:
To: it@group.foobar.com, it@group.foobar.com
Body: Testing new system
----------
To: man@foobar.com, man@foobar.com
Body: Testing new system
----------
To: xyz@foobar.com, yz@foobar.com, new@foobar.com, new_g@foobar.com, ij@foobar.com, turu@foobar.com
Body: Testing new system
----------
To: iu@foobar.com, in@foobar.com, ij@foobar.com, mp@foobar.com, uru@foobar.com
Body: Testing new system
----------https://stackoverflow.com/questions/49287971
复制相似问题