簡體   English   中英

如何比較跨平台的pathlib路徑?

[英]How to compare cross-platform pathlib paths?

我想在我的Python比較路徑unittests ,有時窗戶,有時上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)路徑的好方法?

  • 如果唯一的區別是C:/Users/home ,則可以對.parts進行比較
  • 如果這不起作用,則有許多方法和屬性可能會起作用。
  • 可以將parts列表轉換為set ,然后使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM