python - 如何使用通配符获取路径名字符串并使用 pathlib 解析 glob?

标签 python python-3.x glob pathlib

如果我得到一个字符串形式的路径,例如“~/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/

相关文章:

Python webapp 动态路径

python - 如何使用 MDAnalysis 分析一组原子的principal_axes 和 moment_of_inertia?

Bash glob 扩展,如 echo $pathInVar*

php - 这是检查文件是否存在的正确方法吗?

python - `numpy.mean` 与元组一起用作 `axis` 参数 : not working with a masked array

python - 根据具有值的列的数量转置 DataFrame

python - 如何解决django HayStack、elasticsearch update_index错误?

python - 在 pandas 中使用下采样的另一种方法

在 for 循环中 Bash 任意 glob 模式(带空格)

python - 如何使用 python Pandas 减去行?