如何简化pathlib对象的使用以处理查找字符串的函数

Pie*_*olo 9 python python-2.7

我很喜欢使用pathlib在蟒蛇路径管理,但采用这种封装的缺点是很多的命令,像shutil.copy,.move,内建open需要一个字符串,而不是一个PosixPath对象,从而为错误

TypeError: coercing to Unicode: need string or buffer, PosixPath found
Run Code Online (Sandbox Code Playgroud)

逻辑解决方案当然是使用str().

我的问题是如何修改pathlib对象,以便调用open(pathlib.PosixPath)就可以在不使用的情况下工作str().

Mr_*_*s_D 6

@Navith的答案就是你现在应该在python 3.4中做的.但是,在python 3.6中提出并接受了PEP-519来解决这个有效的问题.

该PEP为类提出了一种协议,该协议表示能够提供str或字节表示的文件系统路径.还建议对Python的标准库进行更改以适当地利用该协议以便于使用路径对象,其中历史上仅接受str和/或字节文件系统路径.

所以在python 3.6中,你引用的标准库方法现在接受Paths,你的问题的答案是使用python 3.6.

  • 这是标准库的一个很好的补充.不幸的是,它仍然留下了许多期望字符串路径的第三方库.我想我们需要将它们指向PEP-519并要求它们支持Pathlike对象.如果有一个更清洁的解决方法而不是记住在任何地方放置"str",那将是很好的. (2认同)

Nav*_*ith 5

Path对象有open,rmdir,chmod,...中的方法工作,你所希望的方式.

>>> import pathlib
>>> a_path = pathlib.Path("a.txt")
>>> a_txt = a_path.open("w", encoding="UTF-8")
>>> a_txt
<_io.TextIOWrapper name='a.txt' mode='w' encoding='UTF-8'>
Run Code Online (Sandbox Code Playgroud)