Python - 如果已经读取了包含特定文本的跳过行,则根据条件

时间:2017-12-15 16:29:55

标签: python-3.x

我有一个很长的信件档,其中包含一个人员身份证号码和几个符合条件的计划。 ID位于每个字母的开头和结尾。到目前为止,我已经能够实现下面的输出。

    Current Output:
    ID1
    Plan1
    Plan3
    ID1
    ID2
    Plan2
    Plan3
    Plan4
    ID2
    ID3
    etc....

    #Current Code:
    import re
    #The input file path is where the file you would like manipulated is
    Input = open(r"Original File Filepath", "r")
    #The output file path is where you want the lines extracted to
    Output = open(r"Destination Filepath", "w")
    #Below just change the green areas to the text on the lines you would   
    like extracted
    for line in Input:
        if re.match("(.*)ID(.*)", line):
            Output.writelines(line)
        if re.match("(.*)Plan1(.*)", line):
            Output.writelines(line)
        if re.match("(.*)Plan2(.*)", line):
            Output.writelines(line)
        if re.match("(.*)Plan3(.*)", line):
            Output.writelines(line)
        if re.match("(.*)Plan4(.*)", line):
            Output.writelines(line)
    Output.close()

我正在尝试将第二个ID写入,并将结果转到csv中的特定列作为" X"基于计划的别名。

    Desired Output:
    ID,Plan1,Plan2,Plan3,Plan4
    ID1,X,,X,
    ID2,,X,X,X

编辑:字母列表如下所示 -

亲爱的史密斯女士1234

你被告知yada yada yada (文本块在这里)

ID 1234

您有资格享受以下计划

第一个

那个

亲爱的琼斯先生身份证598

你被告知yada yada yada (文本块在这里)

ID 598

您有资格享受以下计划

这一个

那个

或其他

1 个答案:

答案 0 :(得分:1)

这里有一些尝试:

Output.write("ID,Plan1,Plan2,Plan3,Plan4")
current_id, current_plan = None, 0
for line in Input:
    match = re.match("(.*)(ID.)(.*)", line)
    if match:
        current_plan = 0
        if current_id == None:
            current_id = match.group(2)
             Output.write("\n" + current_id)
        else:
            current_id = None
    for i in range(current_plan,5):
        if re.match("(.*)Plan{}(.*)".format(i), line):
            Output.write("," * (i - current_plan) + "X")
            current_plan = i
            break