如果我得到一个字符串形式的路径,例如“~/pythoncode/*.py”,在 pathlib
中将其 glob 化的最佳方式是什么?
使用 pathlib,有一种使用 glob 附加到路径的方法:
p = pathlib.Path('~/pythoncode/').expanduser().glob('*.py')
但是,例如,这不起作用,因为用户未展开:
p = pathlib.Path().glob('~/pythoncode/*.py')
这会生成异常,因为我没有向 glob()
提供任何参数:
p = pathlib.Path('~/pythoncode/*.py').expanduser().glob()
在 pathlib
中有没有办法做到这一点,还是我必须先解析字符串?
最佳答案
如果您从字符串 "~/pythoncode/*.py"
开始并且您想要扩展和 glob,您将需要首先拆分路径。幸运的是 pathlib 提供了 .name
和 .parent
来帮助 you out :
def expandpath(path_pattern) -> Iterable[Path]:
p = Path(path_pattern)
return Path(p.parent).expanduser().glob(p.name)
expandpath("~/pythonpath/*.py")
请注意,这个简单的解决方案仅在 name
包含 glob 时才有效,它不适用于路径其他部分的 glob,例如:~/python*/*。 py
。一个更复杂的更通用的解决方案:
def expandpath(path_pattern) -> Iterable[Path]:
p = Path(path_pattern).expanduser()
parts = p.parts[p.is_absolute():]
return Path(p.root).glob(str(Path(*parts)))
expandpath("~/python*/*.py")
注意 2:上述函数失败(IndexError:元组索引超出范围
),这些退化路径:''
,'.'
, '/'
关于python - 如何使用通配符获取路径名字符串并使用 pathlib 解析 glob?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51108256/