Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在html文档上使用python索引函数_Python_Beautifulsoup - Fatal编程技术网

在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>