将多行转换为单行并存储在变量中以供进一步分析

2024-04-19 14:19:22 发布

您现在位置:Python中文网/ 问答频道 /正文

在一封邮件里,下面的几行都有。这些线将被转换为 基于“List Num”的单行。对于打印,下面的代码是 工作。但是当我试图将变量存储为列表或字符串时,它就不起作用了。已经给出了下面的两个代码。你知道吗

mail = mailbody.splitlines()
nmail = ""
lnflg = "yes"
for line in mail:
    if re.findall(r'List Num:\s*([A-Z][0-9]{5}[A-Z]*)', line) != []:
        lnflg = "no"
        print "\n"
    if lnflg == "no":
        print line.rstrip(os.linesep),
    else:
        print line

下面的代码不工作,如果我打印使用for循环

mail = mailbody.splitlines()
nmail = ""
lnflg = "yes"
for line in mail:
    if re.findall(r'List Num:\s*([A-Z][0-9]{5}[A-Z]*)', line) != []:
        lnflg = "no"
        #print "\n"
        nmail = nmail + "\n"
    if lnflg == "no":
        #print line.rstrip(os.linesep),
        nmail = nmail + line.rstrip(os.linesep)
    else:
        nmail = nmail + line

For循环以打印nmail

for ln in nmail:
    print ln


 List Num:  L08586    Proj/Prob: 09P0087           Application: ACI 

 Load to:   TFDSA-SA      Until: ON PROGRAM BASE   Oncall Grp: TPFACI1

 Requester: HZDSF1 - ABCD       Work Phone: XX-XX-XXXXXXXX

 Approver:  FSDSJ8                                 Supervisor: ABCD XYZ

 Updated:   04/28/2011 (01:05:46 E)

 Segments:  PESSFH PESGSDG

 Purpose:   THIS IS RELATED TO 09P0087

            BARCODE WILL BE SUBMITTED IN ANOTHER PGMLST.


 List Num:  L08586    Proj/Prob: 09P0087           Application: ACI

 Load to:   TFDSA-SA      Until: ON PROGRAM BASE   Oncall Grp: TPFACI1

 Requester: HZDSF1 - ABCD       Work Phone: XX-XX-XXXXXXXX

 Approver:  FSDSJ8                                 Supervisor: ABCD XYZ

 Updated:   04/28/2011 (01:05:46 E)

 Segments:  PESSFH PESGSDG

 Purpose:   THIS IS RELATED TO 09P0087

            BARCODE WILL BE SUBMITTED IN ANOTHER PGMLST.

变量中的预期输出:

List Num:  L08586    Proj/Prob: 09P0087           Application: ACI Load to:   TFDSA-SA      Until: ON PROGRAM BASE   Oncall Grp: TPFACI1 Requester: HZDSF1 - ABCD    Work Phone: XX-XX-XXXXXXXX Approver:  FSDSJ8                                 Supervisor: ABCD XYZ Updated:   04/28/2011 (01:05:46 E) Segments:  PESSFH PESGSDG Purpose:   THIS IS RELATED TO 09P0087             BARCODE WILL BE SUBMITTED IN ANOTHER PGMLST.

 List Num:  L08586    Proj/Prob: 09P0087           Application: ACI Load to:   TFDSA-SA      Until: ON PROGRAM BASE   Oncall Grp: TPFACI1 Requester: HZDSF1 - ABCD    Work Phone: XX-XX-XXXXXXXX Approver:  FSDSJ8                                 Supervisor: ABCD XYZ Updated:   04/28/2011 (01:05:46 E) Segments:  PESSFH PESGSDG Purpose:   THIS IS RELATED TO 09P0087             BARCODE WILL BE SUBMITTED IN ANOTHER PGMLST.

Tags: noforiflinemailnumlistproj
1条回答
网友
1楼 · 发布于 2024-04-19 14:19:22

您可以使用BARCODE行来使用groupby分隔行:

from itertools import groupby
with open("foo.txt") as f:
    grouped, data = groupby(map(str.rstrip,f), key=lambda x: x.strip().startswith("BARCODE")), []
    for k,v in grouped:
        if not k:
            data.append("".join(v)+"".join(next(grouped)[1]))


print(data[0])
print()
print(data[1])

输入:

List Num:  L08586    Proj/Prob: 09P0087           Application: ACI
Load to:   TFDSA-SA      Until: ON PROGRAM BASE   Oncall Grp: TPFACI1
Requester: HZDSF1 - ABCD       Work Phone: XX-XX-XXXXXXXX
Approver:  FSDSJ8                                 Supervisor: ABCD XYZ
Updated:   04/28/2011 (01:05:46 E)
Segments:  PESSFH PESGSDG
Purpose:   THIS IS RELATED TO 09P0087
BARCODE WILL BE SUBMITTED IN ANOTHER PGMLST.
List Num:  L08586    Proj/Prob: 09P0087           Application: ACI
Load to:   TFDSA-SA      Until: ON PROGRAM BASE   Oncall Grp: TPFACI1
Requester: HZDSF1 - ABCD       Work Phone: XX-XX-XXXXXXXX
Approver:  FSDSJ8                                 Supervisor: ABCD XYZ
Updated:   04/28/2011 (01:05:46 E)
Segments:  PESSFH PESGSDG
Purpose:   THIS IS RELATED TO 09P0087
BARCODE WILL BE SUBMITTED IN ANOTHER PGMLST.

输出:

List Num:  L08586    Proj/Prob: 09P0087           Application: ACILoad to:   TFDSA-SA      Until: ON PROGRAM BASE   Oncall Grp: TPFACI1Requester: HZDSF1 - ABCD       Work Phone: XX-XX-XXXXXXXXApprover:  FSDSJ8                                 Supervisor: ABCD XYZUpdated:   04/28/2011 (01:05:46 E)Segments:  PESSFH PESGSDGPurpose:   THIS IS RELATED TO 09P0087BARCODE WILL BE SUBMITTED IN ANOTHER PGMLST.


List Num:  L08586    Proj/Prob: 09P0087           Application: ACILoad to:   TFDSA-SA      Until: ON PROGRAM BASE   Oncall Grp: TPFACI1Requester: HZDSF1 - ABCD       Work Phone: XX-XX-XXXXXXXXApprover:  FSDSJ8                                 Supervisor: ABCD XYZUpdated:   04/28/2011 (01:05:46 E)Segments:  PESSFH PESGSDGPurpose:   THIS IS RELATED TO 09P0087BARCODE WILL BE SUBMITTED IN ANOTHER PGMLST.

相关问题 更多 >