【问题标题】:Python iterating through folders and \ charactersPython遍历文件夹和\字符
【发布时间】: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


【解决方案1】:

Doxygen 是你做这类事情的朋友。你给 doxygen 一个源代码文件夹。您指定您认为是源的文件扩展名。然后它会启动并建立文件夹中所有内容的索引。您可以将其输出为 html 或 pdf。

【讨论】:

  • 感谢您的推荐,不过我已经解决了。我发现亲自动手并探索我可以在代码中构建多少控制和潜力真的很令人满意。
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 2021-01-19
  • 1970-01-01
  • 2012-07-12
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多