我想比较我的python unittests
中的路径,有时在Windows上,有时在linux
上。
我正在使用pathlib
,因为这似乎是使用python 3.4及更高版本的方法。
import Path from pathlib
base_dir = Path('~/dev/test').expanduser() # String is given
wdir = base_dir.joinpath('examples/text') # Some other given path
print(wdir)
# on Windows: WindowsPath(C:/Users/myUser/dev/test/examples/text)
# on Linux: PosixPath(/home/myUser/dev/test/examples/text)
wdir
似乎完全不同。
如何进行比较以识别这两个路径在语义上是相同的?
差异仅是因为平台不同而已,有没有一种比较跨平台(Windows,GNU / Linux)的路径的好方法?
答案 0 :(得分:1)
C:/Users
和/home
,则可以比较.parts
parts
列表可以强制转换为sets,然后使用issubset
测试路径是否包含目标路径。from pathlib import Path
w = WindowsPath('C:/Users/myUser/dev/test/examples/text')
l = PosixPath('/home/myUser/dev/test/examples/text')
w.parts
[out]:
('C:\\', 'Users', 'myUser', 'dev', 'test', 'examples', 'text')
l.parts
[out]:
('\\', 'home', 'myUser', 'dev', 'test', 'examples', 'text')
# comparison
l.parts[2:] == w.parts[2:]
[out]:
True
# case issues can be resolved by mapping str.lower
list(map(str.lower, w.parts))
# use sets to determine if the target path is a subset of os_path
def test_path(os_path: Path, target: Path):
target = set(w.parts)
os_path = set(map(str.lower(os_path.parts)))
assert target.issubset(os_path)