在python中仅从diff中提取添加内容

在python中仅从diff中提取添加内容,python,web-scraping,diff,difflib,Python,Web Scraping,Diff,Difflib,我试图解决一个问题: 我收到政府自动生成的电子邮件,没有HTML标签。这是一张桌子套在另一张桌子上。对模板的厌恶。我每隔几天就会得到它,我想从中提取一些字段。我的想法是这样的 在电子邮件中使用HTML作为模板。删除随每封邮件而更改的所有字段,如“我的客户”的名称、其唯一ID以及邮件中解释的问题 使用缺少字段的html模板,并将其与新电子邮件区分开来。这将给我所有的新信息在一个镜头,而不必解析这封电子邮件 问题是,我找不到任何方法只加载这些添加项。我试图在python中使用difflib,它在我无

我试图解决一个问题: 我收到政府自动生成的电子邮件,没有HTML标签。这是一张桌子套在另一张桌子上。对模板的厌恶。我每隔几天就会得到它,我想从中提取一些字段。我的想法是这样的

  • 在电子邮件中使用HTML作为模板。删除随每封邮件而更改的所有字段,如“我的客户”的名称、其唯一ID以及邮件中解释的问题
  • 使用缺少字段的html模板,并将其与新电子邮件区分开来。这将给我所有的新信息在一个镜头,而不必解析这封电子邮件

  • 问题是,我找不到任何方法只加载这些添加项。我试图在python中使用
    difflib
    ,它在我无法正确处理的每一行中返回加法和减法的字节流。我想找到一种只返回添加内容而不返回其他内容的方法。我愿意使用其他库或方法。我不想编写一个包含大量html的大型正则表达式。

    当我使用Popen调用diff得到标准输出时,它也返回字节。
    您可以将字节转换为字符,然后继续处理。
    您可以执行类似于我下面所做的操作,将字节转换为字符串
    下面对两个文件调用diff,并仅打印以“>”符号开头的行(在rhs文件中是新的):


    如果您有HTML,那么您可能应该使用HTML/XML模块,如
    lxml
    beautifulsoup
    #! /usr/env python
    
    import os
    import sys, subprocess
    
    file1 = 'test1'
    file2 = 'test2'
    if len(sys.argv)==3:
        file1=sys.argv[1]
        file2=sys.argv[2]
    
    if not os.access(file1,os.R_OK):
        print(f'Unable to read: \'{file1}\'')
        sys.exit(1)
    if not os.access(file2,os.R_OK):
        print(f'Unable to read: \'{file2}\'')
        sys.exit(1)
    
    argv = ['diff',file1,file2]
    runproc = subprocess.Popen(args=argv, stdout=subprocess.PIPE)
    out, err = runproc.communicate()
    outstr=''
    for c in out:
        outstr+=chr(c)
    for line in outstr.split('\n'):
        if len(line)==0:
            continue
        if line[0]=='>':
            print(line)