pathlib使用glob查找具有给定stem的所有文件



基本上我有一个有效的解决方案,但考虑到pathlib的简单性,我觉得我做错了。

MWE:

filename = Path('a/b/c.txt')
# I want to find all files in `a/b` called `c` with any extension, e.g: `c.pdf`
list(filename.parent.glob(f"{filename.stem}.*"))
# [PosixPath('a/b/c.txt'), PosixPath('a/b/c.pdf')]

从pathlib的角度来看,我会做一些类似filename.glob("*")的事情,但它不起作用(返回[](。

我在文档中找到了with_suffix方法,但它是用于替换的,而不是全局查找。

您只需使用Path.glob("*")和列表理解即可。这会让人感觉更像蟒蛇。

filename = Path("a/b/c.txt")
[f for f in filename.parent.glob("*") if f.stem == filename.stem]
# [PosixPath('a/b/c.txt'), PosixPath('a/b/c.pdf')]

此外,如果只在单个目录中查找,则可以使用Path.iterdir()

filename = Path("a/b/c.txt")
[f for f in filename.parent.iterdir() if f.stem == filename.stem]
# [PosixPath('a/b/c.txt'), PosixPath('a/b/c.pdf')]

最新更新