Python迭代文件夹和\字符

时间:2016-03-20 00:46:59

标签: python

我有一个旧项目,我想在gh页面上发布,我在一堆文件夹中有一堆html文件。

所以我一直拼凑了一段python,它会创建一个显示所有包含的html超链接的索引页面,以便内容可以在gh-pages上浏览,类似于完全使用的方式。 Web服务器,如Apache。

要开始,我将所有内容打印在一个文件中,但不幸的是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()

1 个答案:

答案 0 :(得分:0)

Doxygen是你这方面的朋友。你给doxygen一个源代码文件夹。您可以指定您认为是源的文件扩展名。然后它会关闭并构建文件夹中所有内容的索引。您可以用html或pdf格式输出。