2016-03-20 115 views
0

我有一箇舊項目,我想發佈在gh頁面上,並且我在一堆文件夾中有一堆html文件。Python遍歷文件夾和字符

所以我一直在拼湊一塊python,它會創建一個索引頁面,顯示所有包含的html超鏈接,這樣內容就可以在gh頁面上瀏覽,類似於完全在網頁上完成服務器,如Apache。

要開始我將所有的內容打印在一個文件中,但不幸的是,python將文件位置扔到py'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