2012-03-16 4 views
0

У меня есть два HTML-файла, которые похожи, назовем их old.html и new.html.Замените конкретный блок HTML между 2 файлами с помощью Python

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

Так что если new.html выглядит следующим образом:

<html> 
<table> 
my content 
</table> 
</html> 

И old.html выглядит следующим образом:

<html> 
<!--other html --> 
<table> 
old content 
</table> 
<!-- other html --> 

После этого old.html будет выглядеть следующим образом:

<html> 
<!--other html --> 
<table> 
my content 
</table> 
<!-- other html --> 

I думаю, что у меня есть первая часть этой проблемы, выяснилось, я просто не знаю, как реально модифицировать файлы. я подумал, может быть как-то с помощью какой-то замещающий текст будет работать, но я до сих пор не знаю, как заменить исходный блок кода из old.html

То, что я до сих пор:

from bs4 import BeautifulSoup as Soup 
from soupselect import select 

new_file = "\\path\\to\\new.html" 
old_file = "\\path\\to\\old.html" 


f = open(new_file, "rb") 
soup = Soup(f) 
new_table = soup.table 

f2 = open(old_file, "rb") 
soup2 = Soup(f2) 
old_table = soup2.table 

#process new_table here 

#how do i replace old_table with new_table? 
f.close() 
f2.close() 

ответ

0

Мое решение использует выражения reqular и работает для простого примера, который вы указали выше. Однако сложный HTML-файл с LOTS таблиц потребует более сложного решения.

Старый HTML файл

<html> 
<!--other html --> 
<table> 
replace me 
I'm old and weak 
*cough* can't.. hang.. on.. much... longer.. 
</table> 
<!-- other html --> 

Новый HTML файл

<html> 
<table> 
I'm new content 
replace old content with me 
</table> 
</html> 

мое решение

import re 

# open the files 
Old = open('/somelocation/old.html').read() 
New = open('/somelocation/new.html').read() 

# get the strings you want to swap 
NewTableContents = re.findall(r'<table>([\s\S]+?)</table>',New)[0] 
OldTableContents = re.findall(r'<table>([\s\S]+?)</table>',Old)[0] 

# replace 
Replace = Old.replace(OldTableContents,NewTableContents) 

# output string to new file 
File = open('/somelocation/oldHTMLWithNewTableContents.html','w') 
File.write(Replace) 
File.close() 

Результирующий файл

<html> 
<!--other html --> 
<table> 
I'm new content 
replace old content with me 
</table> 
<!-- other html --> 

Этот пример будет работать, если в каждом файле HTML есть одна таблица. Если в файле содержится более одной таблицы, вам может потребоваться узнать, какие таблицы вы хотите заменить каким-либо контентом.

+0

Спасибо! К счастью, файлы, с которыми я работаю, в значительной степени гарантированно содержат только одну таблицу, так что это работает. Я не рассматривал использование регулярных выражений. Я думал, что мне понадобится библиотека, такая как BeautifulSoup, чтобы сделать тяжелый подъем. – marc

+0

Рад, что это сработало для вас. Милая! Мой первый принятый ответ! – b10hazard

Смежные вопросы