[python] 对 pathlib.Path 实例进行排序.md
# from pathlib.py; 省略了不相关部分
class _WindowsFlavour(_Flavour):
def casefold(self, s):
return s.lower()
def casefold_parts(self, parts):
return [p.lower() for p in parts]
class _PosixFlavour(_Flavour):
def casefold(self, s):
return s
def casefold_parts(self, parts):
return parts
class PurePath(object):
@property
def _cparts(self):
# Cached casefolded parts, for hashing and comparison
try:
return self._cached_cparts
except AttributeError:
self._cached_cparts = self._flavour.casefold_parts(self._parts)
return self._cached_cparts
def __lt__(self, other):
if not isinstance(other, PurePath) or self._flavour is not other._flavour:
return NotImplemented
return self._cparts < other._cparts
@property
def parts(self):
"""An object providing sequence-like access to the
components in the filesystem path."""
# We cache the tuple to avoid building a new one each time .parts
# is accessed. XXX is this necessary?
try:
return self._pparts
except AttributeError:
self._pparts = tuple(self._parts)
return self._pparts
对Path序列进行排序时,Path会将路径按分隔符切分成序列,然后逐元素进行对比,具体来说是在字符首次不相等的时候返回比较结果。
但两个平台下对路径理解不同,windows不考虑路径中字母大小写,因而在排序时会得到与linux下不同的结果。
——> Path.as_posix() 再进行排序

浙公网安备 33010602011771号