2016-03-20 15 views
0

私は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() 
+2

動作しないコードだけで小さなサンプルを投稿できますか?コンソールに印刷して間違った印刷物を表示すると、何が間違っているのかを知るのに役立ちます。 –

+2

Pythonに組み込まれたos.walkメソッド(https://docs.python.org/2.7/library/os.html?highlight=os.walk#os.walkを参照)を使用すると、コードを単純化することができます。 。 – djmoch

+0

@Emil、それは最初の呼び出しとメインの再帰的なメソッドを持つ再帰関数です。私はクラスでそれをラップしましたが、それは2行程度しか節約しませんでした。 – kpie

答えて

0

Doxygenは、この種のもののためにあなたの友達です。 doxygenにソースコードフォルダを与えます。ソースとみなすファイル拡張子を指定します。その後、それはオフになり、フォルダー内のすべてのインデックスを構築します。これはhtmlまたはpdf形式で出力できます。

+0

お勧めしてくれてありがとうございました。私は自分の手を汚して、自分のコードにどれくらいの制御力と潜在能力を持たせるかが本当に満足できると思っています。 – kpie

関連する問題