首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较跨平台路径库路径?

问如何比较跨平台路径库路径?
EN

Stack Overflow用户
提问于 2020-09-18 09:36:55
回答 1查看 527关注 0票数 1

我想比较一下python unittests中的路径,有时在windows上,有时在linux上。

我使用的是pathlib,因为在使用python3.4和更新版本时,它似乎是可行的。

代码语言:javascript
复制
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)路径的好方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-18 09:56:07

  • 如果唯一的区别是C:/Users和/home,您可以对.parts进行比较
  • 如果这样做不起作用,就会有许多方法和性质,这可能有效。
  • 可以将parts列表转换为集合,然后使用issubset测试包含目标路径的路径。
代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63953177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档