【发布时间】:2013-07-19 13:13:20
【问题描述】:
我正在使用 os.walk 从特定文件夹中选择与正则表达式匹配的文件。
for dirpath, dirs, files in os.walk(str(basedir)):
files[:] = [f for f in files if re.match(regex, os.path.join(dirpath, f))]
print dirpath, dirs, files
但这要处理 basedir 下的所有文件和文件夹,相当耗时。我正在寻找一种方法来使用与文件相同的正则表达式来过滤掉每一步中不需要的目录。或者一种只匹配部分正则表达式的方法......
例如,在这样的结构中
/data/2013/07/19/file.dat
使用例如以下正则表达式
/data/(?P<year>2013)/(?P<month>07)/(?P<day>19)/(?P<filename>.*\.dat)
无需查看即可找到所有 .dat 文件,例如/数据/2012
【问题讨论】:
-
您有实际问题吗?
-
而
'%s' % (p.basedir)只是表达str(p.basedir)的一种低效方式,不是吗? -
查看
os.path.join()以从部件构建路径。 -
抱歉,在编辑中提交。现在完成了
-
听起来像是
glob的工作,例如for filename in glob.iglob('/data/2013/07/19/*.dat'):但我不确定问题是什么