我想迭代所有的子目录手术室步行链接,但仅限单步打印。如何降低复杂性?

2024-10-03 04:28:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段代码我一直在做,现在看起来像这样:

  def buildManifestFile(self):
    manifestFile = self.createManifestFileForWriting(self.manifest_target)
    symlinks = []
    for subdir, dirs, files in os.walk(self.basedir, followlinks=True):
      if self.isIncluded(self.includes,self.excludes,subdir[len(self.basedir):]) and not any(link in subdir for link in symlinks):
        if not os.path.islink(subdir):                                      ## symlinks should be listed as files, not followed.
          manifestFile.write('%dir "' + subdir +  '"\n')
        else:
          manifestFile.write('"' + subdir + '"\n')
          symlinks.append(subdir)
          continue
        for fileName in files:
          fileNameWithSubdir = '"' + subdir + "/" + fileName + '"\n'
          if self.isIncluded(self.includes,self.excludes,fileNameWithSubdir):
            manifestFile.write(fileNameWithSubdir)
    self.closeManifestFile(manifestFile)

实际上,我想遍历一个目录,访问所有子目录、文件和符号链接,但我不想跟踪符号链接,因为它会在我的输出中产生大量冗余。实际上我只想把它们打印成文件。上面的代码似乎运行得很好,但困扰我的是,当我在一个有许多符号链接的目录上使用它时,它的复杂性增长得相当快。在


Tags: 代码inselfforifos链接符号
1条回答
网友
1楼 · 发布于 2024-10-03 04:28:20

在手术室步行默认情况下是否列出符号链接,但不跟随符号链接。查看循环文件夹时剩下的内容手术室步行尾巴。在

def oswalker(path):
    walked = list(os.walk(path))
    toplevel = walked[0]
    poss_folder = toplevel[1]
    folders = walked[1:]

    for folder in folders:
        # symlinks will be listed in the walk folders, but are not
        # present in the tail of the walk list
        check = [i for i,x in enumerate(poss_folder) if x in folder[0]]
        if check:
            poss_folder.pop(check[0])

    print "Symlinks %s", poss_folder


oswalker('.')

相关问题 更多 >