Python 将每3行作为一个元素存储在元组中?

Python 将每3行作为一个元素存储在元组中?,python,python-3.x,tuples,Python,Python 3.x,Tuples,我在一个文本文件中有以下内容 主题:安全警报 发件人:谷歌 致:example@email.com 主题:完成新谷歌账户的设置 发件人:谷歌社区团队 致:example@email.com 主题:安全警报 发件人:谷歌 致:example@email.com 我想将前三行存储在一个元组中,接下来的三行存储在另一个元组中,依此类推,如下所示。[预期产出] ['Subject: Security alert', 'From: Google <no-reply@accounts.google.

我在一个文本文件中有以下内容

主题:安全警报
发件人:谷歌
致:example@email.com
主题:完成新谷歌账户的设置
发件人:谷歌社区团队
致:example@email.com
主题:安全警报
发件人:谷歌
致:example@email.com
我想将前三行存储在一个元组中,接下来的三行存储在另一个元组中,依此类推,如下所示。[预期产出]

['Subject: Security alert', 'From: Google <no-reply@accounts.google.com>', 'To: example@email.com']
['Subject: Finish setting up your new Google Account', 'From: Google Community Team <googlecommunityteam-noreply@google.com>', 'To: example@email.com']
['Subject: Security alert', 'From: Google <no-reply@accounts.google.com>', 'To: example@email.com']
['Subject:Security alert','From:Google','To:example@email.com']
[“主题:完成新谷歌账户的设置”,“发件人:谷歌社区团队”,“收件人:example@email.com']
['Subject:Security alert','From:Google','To:example@email.com']
我尝试了下面的代码,但是我缺少了如何使用“每一行”而不是下面尝试的“每一个单词”

with open('input.txt') as f:
     result = map(str.split, f)
     t = tuple(result)
     print(t)

# Unexpected output
(['Subject:', 'Security', 'alert'], [], ['From:', 'Google', '<no-reply@accounts.google.com>'], [], ['To:', 'pavan.python1393@gmail.com'], [], ['Subject:', 'Finish', 'setting', 'up', 'your', 'new', 'Google', 'Account'], [], ['From:', 'Google', 'Community', 'Team', '<googlecommunityteam-noreply@google.com>'], [], ['To:', 'pavan.python1393@gmail.com'], [], ['Subject:', 'Security', 'alert'], [], ['From:', 'Google', '<no-reply@accounts.google.com>'], [], ['To:', 'pavan.python1393@gmail.com'], [])
以open('input.txt')作为f的
:
结果=映射(str.split,f)
t=元组(结果)
打印(t)
#意外输出
(['Subject:','Security','alert'],[],['From:','Google','',,['To:','pavan。python1393@gmail.com“],[],[”主题:“,”完成“,”设置“,”你的“,”新“,”谷歌“,”账户“,[],[”发件人:“,”谷歌“,”社区“,”团队“,”,”,[”收件人:“,”帕万。python1393@gmail.com“],[],[”主题:“,”安全“,”警报“],[],[”发件人:“,”谷歌“,”],[],['收件人:','帕万。python1393@gmail.com'], [])
给你

text = """Subject: Security alert

From: Google <no-reply@accounts.google.com>

To: example@email.com

Subject: Finish setting up your new Google Account

From: Google Community Team <googlecommunityteam-noreply@google.com>

To: example@email.com

Subject: Security alert

From: Google <no-reply@accounts.google.com>

To: example@email.co"""


data = list(filter(bool, text.splitlines()))

def divide_data(l, n):
    for i in range(0, len(l), n):
        yield l[i:i + n]

result = list(divide_data(data, text.count('Subject:')))
text=“”主题:安全警报
发件人:谷歌
致:example@email.com
主题:完成新谷歌账户的设置
发件人:谷歌社区团队
致:example@email.com
主题:安全警报
发件人:谷歌
致:example@email.co"""
数据=列表(过滤器(bool,text.splitlines())
def divide_数据(l,n):
对于范围(0,len(l),n)内的i:
收益率l[i:i+n]
结果=列表(除以数据(数据,text.count('Subject:'))
结果:

[['Subject: Security alert', 'From: Google <no-reply@accounts.google.com>', 'To: example@email.com'], ['Subject: Finish setting up your new Google Account', 'From: Google Community Team <googlecommunityteam-noreply@google.com>', 'To: example@email.com'], ['Subject: Security alert', 'From: Google <no-reply@accounts.google.com>', 'To: example@email.co']]
[['主题:安全警报','发件人:谷歌','收件人:example@email.com“],[“主题:完成新谷歌账户的设置”,“发件人:谷歌社区团队”,“收件人:example@email.com“],[“主题:安全警报”,“发件人:谷歌”,“收件人:example@email.co']]

这将保留之间的行。这就是为什么它抓住了六行而不是三行

text="""Subject: Security alert

From: Google <no-reply@accounts.google.com>

To: example@email.com

Subject: Finish setting up your new Google Account

From: Google Community Team <googlecommunityteam-noreply@google.com>

To: example@email.com

Subject: Security alert

From: Google <no-reply@accounts.google.com>

To: example@email.com"""


lines = text.split('\n')
emails=[]

while lines:
    bunch=lines[:6]
    (esubj,efrom,eto)=bunch[0],bunch[2],bunch[4]
    e=(esubj,efrom,eto)
    print(e)
    assert "ubject" in esubj and "rom" in efrom and "To:" in eto
    emails.append((e))
    lines=lines[6:]
print(emails)
text=“”主题:安全警报
发件人:谷歌
致:example@email.com
主题:完成新谷歌账户的设置
发件人:谷歌社区团队
致:example@email.com
主题:安全警报
发件人:谷歌
致:example@email.com"""
行=文本。拆分('\n')
电子邮件=[]
而线路:
束=行[:6]
(esubj,efrom,eto)=束[0],束[2],束[4]
e=(esubj、efrom、eto)
打印(e)
在esubj中断言“ubject”,在efrom中断言“rom”,在eto中断言“To:”
电子邮件。附加((e))
行=行[6:]
打印(电子邮件)

看看
itertools
文档中定义的
grouper
函数。它的诀窍是。正如我看到的,您假设行只有6行。但是行的数量可能超过6行(例如12行)。不,它通过任何长度的列表工作,一次占用前六行。100行或更多行就可以了。