我试图避免这种事情:
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)
但不幸的是*
参数扩展技巧在扩展列表后不允许进一步的参数。
答案 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]))
它读得不是很好,但它很简洁。很高兴接受其他更好的答案:)