我现正尝试在下列路径列表中找到最后一条匹配的公共路径:
"Linux-aarch64/gcc-7.3.0/aarch64-unknown-linux-gnu/include/c++/7.3.0/aarch64-unknown-linux-gnu/bits/"
"Linux-aarch64/gcc-7.3.0/aarch64-test-linux-gnu/lib64/"
"Linux-aarch64/gcc-7.3.0/aarch64-unknown-bin"也就是说,输出应该是Linux-aarch64/gcc-7.3.0
import os
dirs = ["Linux-aarch64/gcc-7.3.0/aarch64-unknown-linux-gnu/include/c++/7.3.0/aarch64-unknown-linux-gnu/bits/", "Linux-aarch64/gcc-7.3.0/aarch64-test-linux-gnu/lib64/", "Linux-aarch64/gcc-7.3.0/aarch64-unknown-bin"];
prefix = os.path.commonprefix(dirs)
print("Longest common path prefix:", prefix)
print prefix它提供了正确的输出:- Linux-aarch64/gcc-7.3.0/aarch64-
但我期待着Linux-aarch64/gcc-7.3.0。上面的API似乎是逐个字符进行比较。还有其他建议吗?
发布于 2022-10-18 16:48:44
您可以使用公共路径代替。
>>> os.path.commonpath(dirs)
'Linux-aarch64\\gcc-7.3.0'也可以自己写:
>>> def longest_commmon_dir(dirs):
paths = [path.split('/') for path in dirs]
min_length = min(len(path) for path in paths)
for i in range(min_length):
if not all(path[i] == paths[0][i] for path in paths):
break
subdir = '/'.join(paths[0][:i])
return subdir
>>> longest_commmon_dir(dirs)
'Linux-aarch64/gcc-7.3.0'
>>> longest_commmon_dir(['a', 'b'])
''https://stackoverflow.com/questions/74114471
复制相似问题