繁体   English   中英

使用 pathlib 仅获取具有 glob 模式的目录

[英]Get directories only with glob pattern using pathlib

我想使用pathlib.glob()在当前工作目录中查找具有特定名称模式( *data )的目录。 我不想通过.isdir()或其他方式明确检查。

输入数据

这是相关列表,其中三个文件夹作为预期结果,一个文件具有相同的模式,但应该是结果的一部分。

ls -ld *data
drwxr-xr-x 2 user user 4,0K  9. Sep 10:22 2021-02-11_68923_data/
drwxr-xr-x 2 user user 4,0K  9. Sep 10:22 2021-04-03_38923_data/
drwxr-xr-x 2 user user 4,0K  9. Sep 10:22 2022-01-03_38923_data/
-rw-r--r-- 1 user user    0  9. Sep 10:24 2011-12-43_3423_data

预期结果

[
    '2021-02-11_68923_data/', 
    '2021-04-03_38923_data/',
    '2022-01-03_38923_data/'
]

最小的工作示例

from pathlib import Path
cwd = Path.cwd()

result = cwd.glob('*_data/')
result = list(result)

这给了我 3 个文件夹还有文件。

还尝试了变体cwd.glob('**/*_data/')

glob在这里是不够的。 从文件系统的角度来看,目录的名称实际上是“2021-02-11_68923_data”,而不是“2021-02-11_68923_data/”。 由于 glob 只查看名称,因此它无法区分“常规”文件和目录,您必须添加一些额外的检查,例如您提到的isdir

尾随路径分隔符当然应该在 pathlib glob 模式中得到尊重。 这是所有平台上 shell 的预期行为,也是glob 模块的工作方式

如果模式后跟 os.sep 或 os.altsep ,则文件将不匹配

因此,作为一种解决方法,您可以使用 glob 模块来获得您想要的行为:

>>> import glob
>>> glob.glob('*')
['html', 'images', 'test.py']
>>> glob.glob('*/')
['html/', 'images/']

pathlib 的问题已在bpo-22276中修复,并在Python-3.11.0rc1中合并(请参阅新增功能: pathlib )。 因此,如果您想坚持使用 pathlib,请对其进行测试并报告任何问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM