使用Python的glob模块查找一个14位数字命名的文件夹

22
我有一个文件夹及其子文件夹,它们的命名模式都是YYYYMMDDHHMMSS(时间戳)。
我想使用glob来仅选择与该模式匹配的文件夹。
1个回答

32

由于glob不支持正则表达式,因此您需要通过暴力创建匹配字符串来实现。一种方法是利用在[]中的字符范围会被扩展的特性:

C:\temp\py>mkdir 12345678901234

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))
['.\\12345678901234']
>>>

我利用了Python中一个特性,即将字符串乘以整数n会使该字符串重复n次的特点。

当然,您可能希望进行检查以验证给定的路径实际上是一个目录:

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

谢谢回复。目前我正在使用以下正则表达式:[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
9
如果您真的需要确保所有时间戳都是有效的,那么最简单的方法可能是坚持使用'[0-9]' * 14',然后仅接受可以成功解析为datetime.strptime的时间戳。 - Mark Rushakoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接