![](/img/trans.png)
[英]Pattern for extracting paths where filename starts with 0/ 1 using 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.