2017-04-07 67 views
1

彼此我有一个完整的HTML文件的文件夹,如下所示:文件夹中的链接的HTML文件与使用python

aaa.html 
bbb.html 
ccc.html 
.... 
...... 
......... 
zzz.html 

所有这些HTMLS使用Python脚本创建的,因此遵循相同的模板。

现在,我想在HTML中,所有这些HTML文件,其中我已经有占位符链接如下:

<nav> 
    <ul class="pager"> 
     <li class="previous"><a href="#">Previous</a></li> 
     <li class="next"><a href="#">Next</a></li> 
    </ul> 
</nav> 

我想用文件夹中的文件名来填充这些占位符。例如,bbb.html将有

<nav> 
    <ul class="pager"> 
     <li class="previous"><a href="aaa.html">Previous</a></li> 
     <li class="next"><a href="ccc.html">Next</a></li> 
    </ul> 
</nav> 

ccc.html文件将包含:

<nav> 
    <ul class="pager"> 
     <li class="previous"><a href="bbb.html">Previous</a></li> 
     <li class="next"><a href="ddd.html">Next</a></li> 
    </ul> 
</nav> 

等了文件的剩余部分。 这个任务可以使用python完成吗?我甚至不知道如何开始。任何提示,建议都会非常有帮助。

+0

是HTML文件真正字母的顺序?如果你有AAA.html和aaa.html,哪一个最先? – philshem

+2

您可以使用'os.walk'来列出该目录下的文件列表,使用自定义排序功能对其进行排序,然后在该列表中对模板进行排序,然后遍历该列表,使用美丽的汤读取每个文件,将这2个占位符更改为之前的下一个名单上。 –

+0

@philshem订单​​真的没关系。这只是一个文件必须与其他两个文件链接。所以,任何命令都可以。 – kingmakerking

回答

1

您可以通过循环遍历文件列表来替换模板中的元素,并使用列表环绕。这是一个使用AAA认证aaa.html为例,BBB,CCC:

#f = ['aaa.html','bbb.html','ccc.html'] 
f = sorted(['aaa.html','bbb.html','ccc.html']) # explicit sorting 

t = """<nav> 
    <ul class="pager"> 
     <li class="previous"><a href="#">Previous</a></li> 
     <li class="next"><a href="#">Next</a></li> 
    </ul> 
</nav>""" # sample aaa.html file 

for i in xrange(len(f)-1): 
    #print f[i] 
    t = t.replace('<li class="previous"><a href="#">Previous','<li class="previous"><a href="'+f[(i % len(f)) -1]+'">Previous') 
    t = t.replace('<li class="next"><a href="#">Next','<li class="next"><a href="'+f[(i % len(f)) +1]+'">Next') 

print t 

要做到列表包装我用这个concept(后ZZZ自带AAA)

给出作为aaa.html的输出:

<nav> 
    <ul class="pager"> 
     <li class="previous"><a href="ccc.html">Previous</a></li> 
     <li class="next"><a href="bbb.html">Next</a></li> 
    </ul> 
</nav> 

要完成的代码,你必须遍历* .html文件(见glob.glob

2

可以使用beautifulsoup library来修改HTML:

from bs4 import BeautifulSoup 

file_names = ['bbb.html', 'ccc.html', ... , 'yyy.html'] 
# we exclude first and last files (not sure what to do with them ?) 

for ind, file_name in enumerate(file_names): 
    with open(file_name, 'r+') as f: 
     soup = BeautifulSoup(f.read(), 'html.parser') 
     # we suppose that there is only one link for previous and next 
     soup.find_all(class_='previous')[0]['href'] = file_names[ind - 1] 
     soup.find_all(class_='next')[0]['href'] = file_names[ind + 1] 
     # erase contents and replace with new html 
     f.seek(0) 
     f.truncate() 
     f.write(soup.prettify("utf-8")) # to get readable HTML 

如果文件名是不是在你的例子是一致的,和你想生成从目录中的文件列表,你可以使用os.walkglob.glob