Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一种惯用的方式使用Python添加扩展';什么是Pathlib?_Python_Python 3.x_Pathlib - Fatal编程技术网

是否有一种惯用的方式使用Python添加扩展';什么是Pathlib?

是否有一种惯用的方式使用Python添加扩展';什么是Pathlib?,python,python-3.x,pathlib,Python,Python 3.x,Pathlib,我正在使用Python的Pathlib,我想采用类似 p = Path('/path/to/foo') 然后尝试几个不同的扩展。我能行 for ext in ['.txt', '.md', '.note'] filename = Path(str(p) + ext) 但这感觉有点尴尬。有更好的方法吗?该方法将返回具有不同扩展名的新路径,可以更改现有扩展名,也可以添加新扩展名。文档中的示例: >>> p = PureWindowsPath('c:/Downloads/

我正在使用Python的Pathlib,我想采用类似

p = Path('/path/to/foo')
然后尝试几个不同的扩展。我能行

for ext in ['.txt', '.md', '.note']
    filename = Path(str(p) + ext)
但这感觉有点尴尬。有更好的方法吗?

该方法将返回具有不同扩展名的新路径,可以更改现有扩展名,也可以添加新扩展名。文档中的示例:

>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')
>>> p.with_suffix('.bz2')
PureWindowsPath('c:/Downloads/pathlib.tar.bz2')
>>> p = PureWindowsPath('README')
>>> p.with_suffix('.txt')
PureWindowsPath('README.txt')
在您的情况下,
p.with_suffix(ext)
可以完成这项工作


对于需要在任何现有后缀之后添加后缀而不是删除现有后缀的情况,可以使用
p.with_suffix(p.suffix+ext)
。不过,这有点笨重,我不知道我是否更喜欢它而不是
Path(str(p)+ext)

您可能会使用pathlib3x-它提供了一个最新的(在编写本答案Python3.10.a0之日)Python3.6或更高版本的PythonPathLib的后端口,以及一些附加函数,如
append\u suffix

>>> python -m pip install pathlib3x

>>> import pathlib3x as pathlib

>>> pathlib.Path('some_path').append_suffix('.ext')
PosixPath('some_path.ext')

>>> pathlib.Path('some_path.ext.ext2').append_suffix('.ext3')
PosixPath('some_path.ext.ext2.ext3')

>>> pathlib.Path('some_path.ext').append_suffix('.tar.gz')
PosixPath('some_path.ext.tar.gz')


您可以在或上找到它



免责声明:我是pathlib3x库的作者。

也许你可以使用endswith(),但我并不觉得尴尬。这正是我想要的-它甚至在
foo.txt
的情况下替换后缀,如果我用后缀('.md')替换
,那么它将返回
foo.md
。杰出的(我还在页面上搜索“ext”或“extension”,这显然是我错过的原因)不错,但是如果你不想替换现有的后缀怎么办。返回路径(str(Path)+“.xyz”)?@MathieuLongtin:That,或者
p.with_后缀(p.suffix+'.xyz')
。这样更好!不太好,但更好。