import os
from bs4 import BeautifulSoup
do = dir_with_original_files = 'C:\FOLDER'
dm = dir_with_modified_files = 'C:\FOLDER'
for root, dirs, files in os.walk(do):
for f in files:
print f.title()
if f.endswith('~'): #you don't want to process backups
continue
original_file = os.path.join(root, f)
mf = f.split('.')
mf = ''.join(mf[:-1])+'_mod.'+mf[-1] # you can keep the same name
# if you omit the last two lines.
# They are in separate directories
# anyway. In that case, mf = f
modified_file = os.path.join(dm, mf)
with open(original_file, 'r') as orig_f, \
open(modified_file, 'w') as modi_f:
soup = BeautifulSoup(orig_f.read())
for t in soup.find_all('table'):
for child in t.find_all("table"):#*****this is fine for now, but how would I restrict it to find only the first element?
child.REMOVE() #******PROBLEM HERE********
# This is where you create your new modified file.
modi_f.write(soup.prettify().encode(soup.original_encoding))
Cześć wszystkimUsuń pierwszy węzeł dziecko używając BeautifulSoup
Próbuję zrobić parsowanie plików przy użyciu BeautifulSoup oczyścić je nieznacznie. Funkcjonalność chcę jest, że chcę, aby usunąć pierwszą tabelę, która jest w dowolnym miejscu w tabeli, np:
<table>
<tr>
<td></td
</tr>
<tr>
<td><table></table><-----This will be deleted</td
</tr>
<tr>
<td><table></table> --- this will remain here.</td
</tr>
</table>
Obecnie mój kod jest ustawiony, aby znaleźć wszystkie tabele w tabeli i mam składa się Metoda .REMOVE()
, aby pokazać, co chcę osiągnąć. Jak mogę faktycznie usunąć ten element?
Tl; dr -
Jak mogę dostosować mój kod, aby znaleźć tylko pierwszej tabeli zagnieżdżonej w pliku .
Jak mogę usunąć tę tabelę?
Wielkie dzięki za odpowiedź. Czy możliwe jest również usunięcie wszystkich węzłów potomnych tabeli? :) Dzięki. –
@SimonKiely masz na myśli inne wewnętrzne tagi "table" wewnątrz zewnętrznej? Dzięki. – alecxe