2010-04-22 66 views

回答

12

由于glob不支持正则表达式,因此您必须蛮力创建匹配字符串。一种方法是利用这一性质在[]范围的事实优势展开:

C:\temp\py>mkdir 123456789

C:\temp\py>C:\Python26\python.exe 
Python 2.6.2 Stackless 3.1b3 060516 (release26-maint, Apr 14 2009, 21:19:36) [M 
C v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import glob 
>>> glob.glob('./' + ('[0-9]' * 14)) 
['.\\123456789'] 
>>> 

我注意到这一事实的优势,在Python中,字符串乘以一个整数被重复ñ导致该字符串n次。

当然,你可能想继续前进,放在一个检查,以验证给定的路径实际上是一个目录:

>>> [path for path in glob.iglob('./' + ('[0-9]' * 14))] 
['.\\11223344556677', '.\\123456789'] 
>>> [path for path in glob.iglob('./' + ('[0-9]' * 14)) if os.path.isdir(path)] 
['.\\123456789'] 
+0

感谢您的答复。现在我正在使用这个: [0-9] [0-9] [0-9] [0-9] [0-1] [0-9] [0-3] [0-9] [ 0-2] [0-9] [0-2] [0-9] [0-6] [0-9] 它基本上具有我描述的格式规则(限制月,日,小时分钟到他们各自的范围),我只是不确定是否有更好的方法来做到这一点。 – mikec 2010-04-22 16:51:08

+7

@mikec:坚持使用''[0-9]'* 14'可能会更简单,然后只接受可以用'datetime.strptime'成功分析的时间戳,如果您确实需要确保所有时间戳时间戳有效。 – 2010-04-22 16:57:35

相关问题