我正在使用 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

最佳答案

例如,如果您只想处理 /data/2013/07/19 中的文件,只需从目录 top os.walk() 启动 /data/2013/07/19 。这与 Tommi Komulainen 的建议类似,但您无需修改​​循环代码。

关于python - 提高python os.walk + 正则表达式算法的效率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17746999/

10-12 18:12