私はghページに投稿したい古いプロジェクトを持っていて、たくさんのフォルダにhtmlファイルがたくさんあります。フォルダと文字を使ってPythonを繰り返します
私は、コンテンツがWeb上でフルでどのように行われているかのように、ghページでブラウズ可能になるように、含まれているすべてのHTMLハイパーリンクを表示するインデックスページを作成するPythonの部分をまとめましたApacheなどのサーバー
は、私は1つのファイル内のすべてのコンテンツの印刷を持って開始するには残念ながら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()
編集:私はここで答えは[f for f in os.listdir(somedir) if os.path.isfile(f)]
とos.walk交換することだと思います。
別の編集:
このコードのバージョンは動作します...
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メソッド(https://docs.python.org/2.7/library/os.html?highlight=os.walk#os.walkを参照)を使用すると、コードを単純化することができます。 。 – djmoch
@Emil、それは最初の呼び出しとメインの再帰的なメソッドを持つ再帰関数です。私はクラスでそれをラップしましたが、それは2行程度しか節約しませんでした。 – kpie