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