如何解决为什么 pathlib.Path 不实现 __add__?
前提
一个方便但脆弱的路径可能用 Python 写成一个字符串
fdir = r'mydir/'
fname = r'myfile'
fpath = fdir + fname
这是一种糟糕的做法(np.inf
缺点),但语法简洁易读(+1
优点)。
问题
应该 pathlib.Path
已经实现了一个 __add__
方法,这相当于一点语法糖。
pathlib.Path
在内部将路径元素存储为元组并按需构造表示,对吗?理论上,这不应该破坏类中的任何内容——__add__
方法只是在内部 self.joinpath(other)
。
为什么不这样做,这不符合 Python 标准怎么办?
示例
BASE = pathlib.Path('').resolve() # some working directory
...
for fstring,stuff in zip(flist,queue): # some stuff to output to file
with open(BASE + fstring,'w+') as f: # <--- this is compact and readable
f.write(stuff)
这里,附加到路径的常见任务表示为 BASE + string
,它比 BASE.joinpath(string)
更漂亮
一个更丑陋的例子(我不知道你为什么要这样做,但请耐心等待):
s1 = 'components'
s2 = 'arms'
s3 = 'bones'
s4 = 'humerus'
fpath = Path(s1).joinpath(s2).joinpath(s3).joinpath(s4)
对比:
...
fpath = s1 + s2 + s3 + s4
相关
注意
根据 iBug 的回复,这种行为确实出现在文档 (https://docs.python.org/3/library/pathlib.html#basic-use) 中,尽管我在搜索中没有发现它。
解决方法
最有可能令您惊讶的是,pathlib.Path
确实实现了一个 __truediv__
方法,它对应于 /
运算符,并且与您所使用的完全一样期望来自 __add__
方法。
这句话让你瞬间惊呆了。您现在可以转到代码:
s1 = 'components'
s2 = 'arms'
s3 = 'bones'
s4 = 'humerus'
fpath = Path(s1) / s2 / s3 / s4
# PosixPath('components/arms/bones/humerus')
实际上是documented。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。