前提
一个方便但脆弱的路径可以用Python写成字符串。
fdir = r'mydir/'
fname = r'myfile'
fpath = fdir + fname
这是一个糟糕的实践(np.inf
的缺点),但语法简洁可读性强(+1
的优点)。
问题
如果pathlib.Path
已经实现了一个__add__
方法,这就相当于一个小的语法糖。
pathlib.Path
以元组的形式在内部存储路径元素,并根据需要构造表示,对吗?理论上,这不应该破坏类中的任何内容-- __add__
方法只是内部self.joinpath(other)
。
为什么这件事没有完成,这是非丙酮的呢?
示例
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的响应,这种行为确实会出现在docs (https://docs.python.org/3/library/pathlib.html#basic-use)中,尽管我在搜索中忽略了它。
发布于 2021-03-17 16:18:42
最让您惊讶的是,pathlib.Path
确实实现了一个__truediv__
方法,该方法对应于/
操作符,其工作方式与您对__add__
方法的期望完全相同。
这句话让你大吃一惊。现在可以转到代码:
s1 = 'components'
s2 = 'arms'
s3 = 'bones'
s4 = 'humerus'
fpath = Path(s1) / s2 / s3 / s4
# PosixPath('components/arms/bones/humerus')
实际上是记录在案。
https://stackoverflow.com/questions/66677029
复制相似问题