在python glob中支持扩展
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python glob中支持扩展相关的知识,希望对你有一定的参考价值。
我有python 2.7,我试图发出:
glob('{faint,bright*}/{science,calib}/chip?/')
我没有得到任何匹配,但是来自shell echo {faint,bright*}/{science,calib}/chip?
给出:
faint/science/chip1 faint/science/chip2 faint/calib/chip1 faint/calib/chip2 bright1/science/chip1 bright1/science/chip2 bright1w/science/chip1 bright1w/science/chip2 bright2/science/chip1 bright2/science/chip2 bright2w/science/chip1 bright2w/science/chip2 bright1/calib/chip1 bright1/calib/chip2 bright1w/calib/chip1 bright1w/calib/chip2 bright2/calib/chip1 bright2/calib/chip2 bright2w/calib/chip1 bright2w/calib/chip2
我的表情有什么问题?
答案
由于{}
不是Python中的部分glob(),你可能想要的是类似的东西
import os
import re
...
match_dir = re.compile('(faint|bright.*)/(science|calib)(/chip)?')
for dirpath, dirnames, filenames = in os.walk("/your/top/dir")
if match_dir.search(dirpath):
do_whatever_with_files(dirpath, files)
# OR
do_whatever_with_subdirs(dirpath, dirnames)
另一答案
{..}
被称为支撑扩张,并且是在发生球状体之前应用的单独步骤。
它不是globs的一部分,并且不受python glob函数的支持。
另一答案
试试https://pypi.python.org/pypi/braceexpand
pip install braceexpand
演示:
>>> from braceexpand import braceexpand
# Integer range
>>> list(braceexpand('item{1..3}'))
['item1', 'item2', 'item3']
# Nested patterns
>>> list(braceexpand('python{2.{5..7},3.{2,3}}'))
['python2.5', 'python2.6', 'python2.7', 'python3.2', 'python3.3']
另一答案
作为that other guy
pointed out,Python不直接支持大括号扩展。但是,由于在评估通配符之前完成大括号扩展,您可以自己做,例如,
result = glob('{faint,bright*}/{science,calib}/chip?/')
变
result = [
f
for b in ['faint', 'bright*']
for s in ['science', 'calib']
for f in glob('{b}/{s}/chip?/'.format(b=b, s=s))
]
以上是关于在python glob中支持扩展的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中查找扩展名为 .txt 的目录中的所有文件