我正在提取HTML 文档的某个部分(公平地说:这是iXBRL文档的基础,这意味着我有很多编写的格式代码< / strong> inside)并将我的输出,原始文件不带提取的部分写入.txt文件。我的目标是测量文档大小的差异(原始文档的KB数量是指提取的部分)。据我所知,HTML与文本格式不应有任何区别,因此我的差异应该是可靠的,尽管我正在比较两种不同的文档格式。到目前为止我的代码是:
import glob
import os
import contextlib
import re
@contextlib.contextmanager
def stdout2file(fname):
import sys
f = open(fname, 'w')
sys.stdout = f
yield
sys.stdout = sys.__stdout__
f.close()
def extractor():
os.chdir(r"F:\Test")
with stdout2file("FileShortened.txt"):
for file in glob.iglob('*.html', recursive=True):
with open(file) as f:
contents = f.read()
extract = re.compile(r'(This is the beginning of).*?Until the End', re.I | re.S)
cut = extract.sub('', contents)
print(file.split(os.path.sep)[-1], end="| ")
print(cut, end="\n")
extractor()
注意:我不使用BS4或lxml,因为我不仅对HTML文本感兴趣,而且实际上在我的开始和结束RegEx之间的所有行中。所有格式化代码行。
File1.html - &gt; File1Short.txt
File2.html - &gt; File2Short.txt ...
任何帮助表示赞赏!
答案 0 :(得分:0)
好的,我明白了。 最终守则是:
import glob
import os
import re
from os import path
def extractor():
os.chdir(r"F:\Test") # the directory containing my html
for file in glob.glob("*.html"): # iterates over all files in the directory ending in .html
with open(file) as f, open((file.rsplit(".", 1)[0]) + ".txt", "w") as out:
contents = f.read()
extract = re.compile(r'Start.*?End', re.I | re.S)
cut = extract.sub('', contents)
out.write(cut)
out.close()
extractor()