不同路径中多个共同前缀
抱歉标题有点乱,我的问题是这样的。我有一组路径,我想找出它们的多个公共前缀。比如说,我有:
['/usr/local/lib/python2.7/dist-packages/pkg_name-0.1-py2.7.egg/pkg_name',
'/usr/local/lib/python2.7/dist-packages/pkg_name-0.1-py2.7.egg/EGG-INFO',
'/usr/bin/pkg_name']
我想得到:
['/usr/local/lib/python2.7/dist-packages/pkg_name-0.1-py2.7.egg/',
'/usr/bin/pkg_name']
因为前两个路径有一个共同的前缀,它是一个目录。希望我说得够清楚。
rubik
补充说明:我手上的路径是一些Python的包和可执行文件。我想要删除整个包,而不是里面的目录,比如EGG-INFO
或pkg_name
。所以需要的是/usr/.../dist-packages/pkg_name-0.1-py2.7.egg/
。而另一个路径,因为是可执行文件,所以保持不变。
谢谢
1 个回答
2
这个问题没有说得很清楚。你想要的结果是什么呢:
/usr/bin/a
/usr/bin/b
/usr/etc
/usr/local
是一个 /usr
还是两个:/usr/bin
和 /usr
,或者三个呢?
无论是哪种情况,算法的步骤都是这样的:
- 先把列表排序
- 取第一个元素,然后用
os.path.commonprefix()
方法和第二个、第三个,直到第 i 个元素进行比较,直到找到的公共前缀不是/
;这就会是你的第一组 - 从第 (i+1) 个元素开始,重复第 2 步