Python удалить данные из HTML файла на основе повторяющегося значения - PullRequest
1 голос
/ 05 августа 2020

Я хотел бы знать, как удалить результаты из моего файла html на основе повторяющегося значения.

В приведенном ниже примере html из сгенерированного отчета есть повторяющиеся числа в строке NAME2. '12345', из-за этого я хотел бы удалить всю запись.

Хитрость в том, что повторяющиеся значения будут динамическими c, но всегда будут в одной строке 'NAME2'. Когда я говорю удалить всю запись, в приведенном ниже примере у нас есть дубликат в строке 'NAME2', поэтому я хотел бы удалить все ('NAME1', 'NAME2', 'NAME3', 'NAME4') из файла.

Я включил ниже пример кода, а также мой ожидаемый результат.

<code><SAMPLE CODE>
<html>
<head>
</head>
<body>
<pre>
<font face="courier new" size=-4>                                                

NAME1......... DOUG
NAME2........... 12345
NAME3... BILL
NAME4...... BOB

NAME1......... ALLAN
NAME2........... 12345
NAME3... MITCHELL
NAME4...... TOM

</font>
<font face="courier new" size=-4>                                                

NAME1......... DOUG
NAME2........... 12345
NAME3... BILL
NAME4...... BOB



</font>

1 Ответ

1 голос
/ 05 августа 2020

Этот скрипт сравнивает все NAME2 значения, и если они равны, в HTML документе остается только первая группа (возможно, регулярные выражения необходимо настроить, чтобы они соответствовали реальным данным в ваших документах):

<code>import re
from bs4 import BeautifulSoup


html_data = '''
<html>
<head>
</head>
<body>
<pre>
<font face="courier new" size=-4>

NAME1......... DOUG
NAME2........... 12345
NAME3... BILL
NAME4...... BOB

NAME1......... ALLAN
NAME2........... 12345
NAME3... MITCHELL
NAME4...... TOM

</font>
'' 'soup = BeautifulSoup (html_data,' html .parser ') vals = set (re.findall (r'NAME2 \. + \ S * (. *) \ S *', суп .font.text)) если len (vals) == 1: soup.font.string = re.search (r '. *? NAME1. *? \ n \ n', soup.font.text, flags = re. S) .group (0) print (soup.prettify ())

Выводит:

<code><html>
 <head>
 </head>
 <body>
  <pre>
<font face="courier new" size="-4">

NAME1......... DOUG
NAME2........... 12345
NAME3... BILL
NAME4...... BOB

</font>
...