【发布时间】:2016-07-06 15:55:17
【问题描述】:
我有一个旧项目,我想在 gh-pages 上发布,我在一堆文件夹中有一堆 html 文件。
所以我一直在拼凑一段 python,它会创建一个索引页面,显示所有包含的 html 超链接,以便内容可以在 gh-pages 上浏览,类似于在 web 服务器上使用 full 完成的方式比如阿帕奇。
首先,我将所有内容打印在一个文件中,但不幸的是,python 将文件位置作为 py r'Strings' 抛出,其中\ 用\ 转义。
我一直在努力防止这种情况导致 IO 错误,但有点卡住了。
import os
class indexer:
path = "~"
prod = []
def __init__(self,p):
self.path=p
def HtmlFrek(self,k):
print("rek")
os.chdir(k)
ret="<h1>"+k+"</h1>"
files = [f for f in os.listdir('.') if os.path.isfile(f) and f.split(".")[len(f.split("."))-1]=="html"]
for t in files:
t.replace(".","")
t.replace("\\","/")
ret+= "<a href = http://krewn.github.io/datasci"+k+">"+k+"</a>\n"
folders = [x[0] for x in os.walk('.')]
for k in folders:
print k
if(k == '.'):
continue
print k
ret+="<div class='blue1'>"
ret+=self.HtmlFrek(k)
ret = "</div>"
os.chdir("..")
return(ret)
def HtmlProd(self):
print("start")
ret = []
ret.append("""<!DOCTYPE html><html>""")
ret.append("<div class = 'ClearShadeLeft'>")
folders = [x[0] for x in os.walk('.')]
for k in folders:
ret[1]+="<div class='blue1'>"
ret[1]+=self.HtmlFrek(k)
ret[1] = "</div>"
ret[1] = "</div>"
ret.append("""<\html><html>""")
self.prod = ret
return(ret)
i = indexer(".")
i.HtmlProd()
print i.prod
for k in i.prod:
print k
print()
编辑:我认为这里的答案是将 os.walk 替换为 [f for f in os.listdir(somedir) if os.path.isfile(f)]。
另一个编辑:
这个版本的代码可以工作...
import os
class indexer:
path = "~"
site = "http://krewn.github.io"
proj = "Reprogramming"
prod = []
loc=[]
def __init__(self,p):
self.path=p
def fprep(self,name):
name.replace(".","")
name.replace("\\","/")
return(name)
def refPrep(self):
ref = self.site+"/"+self.proj
for qw in self.loc:
ref+="/"+qw
return(ref)
def HtmlFrek(self,adir):
self.loc.append(adir)
os.chdir(adir)
ret="<h2>"+adir+"</h2>"
files = [f for f in os.listdir('.') if os.path.isfile(f) and f.split(".")[len(f.split("."))-1]=="html"]
for t in files:
ret+="<a href ="+self.refPrep()+"/"+self.fprep(t)+">"+self.fprep(t)+"</a><br>\n"
images = [f for f in os.listdir('.') if os.path.isfile(f) and f.split(".")[len(f.split("."))-1]=="png"]
for i in images:
i = self.fprep(i)
ref = self.refPrep()
ret+= "<img src="+ref+"/"+i+">\n"
folders = [f for f in os.listdir(".") if not os.path.isfile(f)]
for k in folders:
if(k.__contains__(".")):
continue
ret+="<div class='blue1'>"
ret+=self.HtmlFrek(k)
ret+="</div>"
os.chdir("..")
del self.loc[len(self.loc)-1]
return(ret)
def HtmlProd(self):
print("start")
ret = ""
ret+="""<!DOCTYPE html><html>"""
ret+="<div>"
files = [f for f in os.listdir('.') if os.path.isfile(f) and f.split(".")[len(f.split("."))-1]=="html"]
for t in files:
ret+="<a href ="+self.refPrep()+"/"+self.fprep(t)+">"+self.fprep(t)+"</a><br>\n"
folders = [f for f in os.listdir(".") if not os.path.isfile(f)]
for k in folders:
if(k.__contains__(".")):
continue
print k
ret+="<div>"
ret+=self.HtmlFrek(k)
ret+="</div>"
ret+="</div>"
ret+="""</html>"""
self.prod = ret
return(ret)
i = indexer(".")
q=i.HtmlProd()
#print i.prod
w = open("index.html","w")
w.write(q)
w.close()
【问题讨论】:
-
您能否发布一个仅包含不起作用的代码的较小示例?如果您可以将其打印到控制台并显示不正确的打印输出,这也将有助于我们查看问题所在并更好地回答您的问题。
-
保证如果您使用 Python 内置的 os.walk 方法,您将能够简化您的代码(请参阅docs.python.org/2.7/library/os.html?highlight=os.walk#os.walk)。
-
@Emil,对不起,它是一个递归函数,具有初始调用和主要递归方法。我将它包装在一个类中,但它只能节省 2 行左右。
-
@djmoch,我用过 os.walk,显然方式不对……
标签: python