我有两组路径,第一组可能有5000个文件,第二组可能有10000个文件。第一组包含在第二组中。我需要检查第二组中的任何条目是否是第一组中任何条目的子项(即,它是否是第一组中另一个目录中的子目录或文件)。还有一些额外的要求:
我正在考虑为每个条目获取os.path.abspath()
和os.path.realpath()
,然后将它们与os.path.commonpath([parent]) == os.path.commonpath([parent, child])
进行比较。我无法想出一个快速运行的好方法。或者直接比较字符串是否安全?这会让事情变得容易多了。谢谢!
答案 0 :(得分: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