使用os.path.join构造向上路径时,如何能够连续避免大量的os.pardir?

时间:2016-05-27 03:51:57

标签: python python-2.7 path filesystems

我试图避免这种事情:

sibling_location = os.path.join(leaf_dir, os.pardir, os.pardir, os.pardir, sibling_name)

我认为说

会很酷
sibling_location = os.path.join(leaf_dir, *[os.pardir]*3, sibling_name)

但不幸的是*参数扩展技巧在扩展列表后不允许进一步的参数。

2 个答案:

答案 0 :(得分:2)

如何使用pathlib2(Python 3标准库模块pathlib的后端)?

>>> leaf_dir = '/path/to/some/deep/deeper/leaf_dir'
>>> sibling_name = 's'
>>> 
>>> # Using os.path.join
>>> import os
>>> os.path.join(leaf_dir, *([os.pardir]*3 + [sibling_name]))
'/path/to/some/deep/deeper/leaf_dir/../../../s'
>>> os.path.normpath(os.path.join(leaf_dir, *([os.pardir]*3 + [sibling_name])))
'/path/to/some/s'
>>>
>>> # Using pathlib / pathlib2
>>> import pathlib2
>>> str(pathlib2.Path(leaf_dir).parents[2] / sibling_name)
'/path/to/some/s'

答案 1 :(得分:1)

嘿 - 找到了办法。

sibling_location = os.path.join(leaf_dir, *([os.pardir]*3 + [sibling_name]))

它读得不是很好,但它很简洁。很高兴接受其他更好的答案:)