0

我有两组路径,第一组可能有 5000 个文件,第二组可能有 10000 个文件。第一组包含在第二组中。我需要检查第二组中的任何条目是否是第一组中任何条目的子目录(即,它是否是第一组中另一个目录中的子目录或文件)。还有一些额外的要求:

  • 不对文件系统进行任何操作,应该只对路径字符串进行操作(如果需要处理符号链接除外)。
  • 平台无关(例如大写/小写,不同的分隔符)
  • 对于表达相同路径的不同方式,它应该是稳健的。
  • 它应该同时处理符号链接及其目标。
  • 有些路径是绝对的,有些是相对的。
  • 这应该尽可能快!

我正在考虑同时获取os.path.abspath()os.path.realpath()获取每个条目,然后将它们与os.path.commonpath([parent]) == os.path.commonpath([parent, child]). 不过,我想不出一个跑得这么快的好方法。或者直接比较字符串是否安全?这会让事情变得容易得多。谢谢!

编辑:我对平台独立性有点不清楚。它应该适用于所有平台,但不会混合使用例如 Windows 和 Unix 风格的路径。

4

1 回答 1

0

您可以首先使用计算所有路径的真实路径,os.path.realpath然后使用os.path.commonprefix检查第一组路径的子路径中是否有一条路径。

例子:

import os

first = ['a', 'b/x', '/r/c']
second = ['e', 'b/x/t', 'f']

first = set(os.path.realpath(p) for p in first)
second = set(os.path.realpath(p) for p in second)

for s in second:
    if any(os.path.commonprefix([s, f]) == f
           for f in first):
        print(s)

你得到:

/full/path/to/b/x/t
于 2018-05-17T22:03:41.097 回答