在html文档上使用python索引函数
下面的脚本查看在html文档上使用python索引函数,python,beautifulsoup,Python,Beautifulsoup,下面的脚本查看html文档。首先,它用不同的文本替换某些文本。这部分按预期工作。下一个任务是将`标记之间的文本分成若干组。并将它们、组放置在[]中。这正如预期的那样有效。这是它掉下来的地方。它应该使用这些组[]来比较每个组实体Id..,如果发现匹配/重复,我希望它删除相对组。不幸的是,此脚本没有删除具有重复项的组,而且其中的内容已经足够多了。在某些情况下,重复次数超过100次。它们是动态的,因此可能有许多不同的实体Id…xxx都有重复项。与其删除每个包含重复项的组,不如为每个重复的实体Id保留一
html
文档。首先,它用不同的文本替换某些文本。这部分按预期工作。下一个任务是将`
标记之间的文本分成若干组。并将它们、组放置在[]
中。这正如预期的那样有效。这是它掉下来的地方。它应该使用这些组[]
来比较每个组实体Id..
,如果发现匹配/重复,我希望它删除相对组。不幸的是,此脚本没有删除具有重复项的组,而且其中的内容已经足够多了。在某些情况下,重复次数超过100次。它们是动态的,因此可能有许多不同的实体Id…xxx
都有重复项。与其删除每个包含重复项的组,不如为每个重复的实体Id保留一个组。
我的问题是否在此范围内
for group in groups[1:]:
if group[1] == groups[groups.index(group)-1][1]:
groups.remove(group)
据我所知,它使用组[1]
这是文档中最后一个实体Id…123456
作为对组[groups.index(group)-1][1]的查找值:
由于index
功能,它将包括文档中的每个实体Id
。但由于组[1]
不在“索引”功能中,因此它仅使用最后一个实体Id…
作为查找?如果组[1]=,是否需要在中包含索引
from bs4 import BeautifulSoup
import re
import urllib
import os
svdir = ''
filename = 'something.html'
with open(r'something.html', 'r') as f:
html_string = f.read()
soup = BeautifulSoup(html_string)
target = soup.find_all(text=re.compile(r'Serial#.........'))
for v in target:
v.replace_with(v.replace('Serial#.........','Note Id.....'))
target1 = soup.find_all(text=re.compile(r'Cust#...........'))
for v in target1:
v.replace_with(v.replace('Cust#...........','Entity Id...'))
target2 = soup.find_all(text=re.compile(r'Customer Name...'))
for v in target2:
v.replace_with(v.replace('Customer Name...','Entity Name.'))
target3 = soup.find_all(text=re.compile(r'BILL TO NO NAME.'))
for v in target3:
v.replace_with(v.replace('BILL TO NO NAME.','Note Detail.'))
target4 = soup.find_all(text=re.compile(r'FIXED DATE......'))
for v in target4:
v.replace_with(v.replace('FIXED DATE......','Create Date.'))
data = soup.select_one('font')
targets = data.text.replace('Note Id','xxxNote Id').split('xxx')
groups = [target.strip().split('\n') for target in targets[1:]]
for group in groups[1:]:
if group[1] == groups[groups.index(group)-1][1]:
groups.remove(group)
new_ts = '\n'
for group in groups:
new_ts += '\n'.join(group)+'\n\n'
data.string.replace_with(new_ts)
print(soup)
sv_path = os.path.join(svdir, filename)
fp = open(sv_path, 'w')
fp.write(str(soup))
fp.close()
下面是一些示例html,只是作为结构指南
<font>
##This is a group##
Serial#......... 123456789101234567
Cust#........... 123456
Customer Name... Joe Rogan
BILL TO NO NAME. Bill To: 000000 - Some Company
FIXED DATE...... 01/01/00
##This is another group##
Serial#......... 765432110987654321
Cust#........... 123456
Customer Name... Nate Diaz
BILL TO NO NAME. Bill To: 000001 - Some other company
FIXED DATE...... 01/01/00
Serial#......... 123456789101234567
Cust#........... 123451
Customer Name... Someone Famous
BILL TO NO NAME. Bill To: 000012 - My Company
FIXED DATE...... 01/01/00
Serial#......... 7765897411126
Cust#........... 123456
Customer Name... John Giles
BILL TO NO NAME. Bill To: 000123 - Sole trader PTY LTD
FIXED DATE...... 01/01/00
Serial#......... 12345665432112345
Cust#........... 000001
Customer Name... Mary Mack
BILL TO NO NAME. Bill To: 000245 - Hello.PTY.LTD
FIXED DATE...... 01/01/00`
</font>
##这是一个小组##
连载。。。。。。。。。123456789101234567
客户。。。。。。。。。。。123456
客户名称。。。主演
比尔没有名字。账单收件人:000000-某公司
固定日期。。。。。。01/01/00
##这是另一组##
连载。。。。。。。。。765432110987654321
客户。。。。。。。。。。。123456
客户名称。。。迪亚兹
比尔没有名字。账单收件人:000001-其他公司
固定日期。。。。。。01/01/00
连载。。。。。。。。。123456789101234567
客户。。。。。。。。。。。123451
客户名称。。。名人
比尔没有名字。账单收件人:000012-我的公司
固定日期。。。。。。01/01/00
连载。。。。。。。。。7765897411126
客户。。。。。。。。。。。123456
客户名称。。。尊尼·基路士
比尔没有名字。账单收件人:000123-独家贸易私人有限公司
固定日期。。。。。。01/01/00
连载。。。。。。。。。12345665432112345
客户。。。。。。。。。。。000001
客户名称。。。玛丽·麦克
比尔没有名字。账单收件人:000245-Hello.PTY.LTD
固定日期。。。。。。01/01/00`
这是我希望得到的
<font>
Note Id..... 123456789101234567
Entity Id... 123456
Entity Name. Joe Rogan
Note Detail. Bill To: 000000 - Some Company
Create Date. 01/01/00
Note Id..... 12345665432112345
Entity Id... 000001
Entity Name. Ned Flanders
Note Detail. Bill To: 000002 - Some other big company
Create Date. 01/01/00
Note Id..... 123456789101234567
Entity Id... 123451
Entity Name. Someone Famous
Note Detail. Bill To: 000012 - My Company
Create Date. 01/01/00
</font>
注释Id。。。。。123456789101234567
实体Id。。。123456
实体名称。主演
注意细节。账单收件人:000000-某公司
创建日期。01/01/00
注释Id。。。。。12345665432112345
实体Id。。。000001
实体名称。内德·弗兰德
注意细节。账单收件人:000002-其他大公司
创建日期。01/01/00
注释Id。。。。。123456789101234567
实体Id。。。123451
实体名称。名人
注意细节。账单收件人:000012-我的公司
创建日期。01/01/00
重新导入
从bs4导入BeautifulSoup
html_数据=“”
连载。。。。。。。。。123456789101234567
客户。。。。。。。。。。。123456
客户名称。。。主演
比尔没有名字。账单收件人:000000-某公司
固定日期。。。。。。01/01/00
连载。。。。。。。。。765432110987654321
客户。。。。。。。。。。。123456
客户名称。。。迪亚兹
比尔没有名字。账单收件人:000001-其他公司
固定日期。。。。。。01/01/00
连载。。。。。。。。。123456789101234567
客户。。。。。。。。。。。123451
客户名称。。。名人
比尔没有名字。账单收件人:000012-我的公司
固定日期。。。。。。01/01/00
连载。。。。。。。。。7765897411126
客户。。。。。。。。。。。123456
客户名称。。。尊尼·基路士
比尔没有名字。账单收件人:000123-独家贸易私人有限公司
固定日期。。。。。。01/01/00
连载。。。。。。。。。12345665432112345
客户。。。。。。。。。。。000001
客户名称。。。玛丽·麦克
比尔没有名字。账单收件人:000245-Hello.PTY.LTD
固定日期。。。。。。01/01/00
'''
soup=BeautifulSoup(html_数据'html.parser')
groups=soup.font.text.replace('Serial#','xxx Serial#')。split('xxx'))
已看到,out=set(),[]
对于g组:
m=re.search(r'Cust#.*(\d+)\s*$,g,flags=re.m)
如果不是m:
持续
如果看不到m组(1):
见.增补(m.组(1))
out.append(g.strip())
soup.find('font').string.replace_为('\n'+'\n\n'.join(out)+'\n')
印花(汤)
印刷品:
<font>
Serial#......... 123456789101234567
Cust#........... 123456
Customer Name... Joe Rogan
BILL TO NO NAME. Bill To: 000000 - Some Company
FIXED DATE...... 01/01/00
Serial#......... 123456789101234567
Cust#........... 123451
Customer Name... Someone Famous
BILL TO NO NAME. Bill To: 000012 - My Company
FIXED DATE...... 01/01/00
Serial#......... 12345665432112345
Cust#........... 000001
Customer Name... Mary Mack
BILL TO NO NAME. Bill To: 000245 - Hello.PTY.LTD
FIXED DATE...... 01/01/00
</font>
连载。。。。。。。。。123456789101234567
客户。。。。。。。。。。。123456
客户名称。。。主演
比尔没有名字。账单收件人:000000-某公司
固定日期。。。。。。01/01/00
连载。。。。。。。。。123456789101234567
客户。。。。。。。。。。。123451
客户名称。。。名人
比尔没有名字。账单收件人:000012-我的公司
固定日期。。。。。。01/01/00
连载。。。。。。。。。12345665432112345
客户。。。。。。。。。。。000001
客户名称。。。玛丽·麦克
比尔没有名字。账单收件人:000245-Hello.PTY.LTD
固定日期。。。。。。01/01/00
不是刮片,这是本地目录中的文件。为什么在导出的结果中有两个组的客户为000001?很抱歉,这是我的错误。谢谢你把它捡起来。我编辑过
<font>
Serial#......... 123456789101234567
Cust#........... 123456
Customer Name... Joe Rogan
BILL TO NO NAME. Bill To: 000000 - Some Company
FIXED DATE...... 01/01/00
Serial#......... 123456789101234567
Cust#........... 123451
Customer Name... Someone Famous
BILL TO NO NAME. Bill To: 000012 - My Company
FIXED DATE...... 01/01/00
Serial#......... 12345665432112345
Cust#........... 000001
Customer Name... Mary Mack
BILL TO NO NAME. Bill To: 000245 - Hello.PTY.LTD
FIXED DATE...... 01/01/00
</font>