gpt4 book ai didi

python - 使用正则表达式输入创建列表

转载 作者:太空宇宙 更新时间:2023-11-04 03:42:56 28 4
gpt4 key购买 nike

我在 python 2.7.7 中使用 os.walk 搜索一个非常复杂的目录树,并希望通过对结果目录使用适当的修剪来限制搜索

import os,re
dirExclude = set(['amip4K','amip4xCO2','aqua4K','aqua4xCO2'])
for (path,dirs,files) in os.walk(inpath,topdown=True):
dirs[:] = [d for d in dirs if d not in dirExclude]
# Do something

我想附加到此 dirExclude 列表/设置与正则表达式 r'decadal[0-9]{4}' 匹配的任何内容,但是我很难确定如何最好地在我的列表中使用正则表达式/设置定义?

这里有什么建议吗?或者确实是使用 os.walk 函数的更有效方法?

经过一些建议,上述可以改进为:

import os,re
dirExclude = set(['amip4K','amip4xCO2','aqua4K','aqua4xCO2'])
decExclude = re.compile(r'decadal[0-9]{4}')
for (path,dirs,files) in os.walk(inpath,topdown=True):
dirs[:] = [d for d in dirs if d not in dirExclude and not re.search(decExclude,d)]
# Do something

在调查了 dir[:] =dir = 分配之后,需要 [:] 来确保 os.walk 使用修剪后的目录列表,而不是完整的(预修剪的)目录列表

最佳答案

与其添加到 dirExclude,不如检查 dirname 中的 r'decadal[0-9]{4}' 是否匹配d?

我在想这样的事情:

import re
dirExclude = set(['amip4K','amip4xCO2','aqua4K','aqua4xCO2'])
exre = re.compile(r'decadal[0-9]{4}')
for (path,dirs,files) in os.walk(inpath,topdown=True):
dirs = [d for d in dirs if d not in dirExclude and not exre.search(d)]
# Do something

解释:

exre.search(d) 将返回 None 如果在 d 中没有匹配您的正则表达式。 not None 将评估为 True。否则,exre.search(d) 将返回一个 MatchObjectnot exre.search(d) 将计算为 False.

编译正则表达式是可选的。不编译,你会发出

exre = r'decadal[0-9]{4}'

dirs = [d for d in dirs if d not in dirExclude and not re.search(exre, d)]

当您需要多次应用正则表达式以便仅执行一次编译部分时,编译会很有用。但是,大多数时候您不会注意到差异,因为即使您不手动编译正则表达式,Python 也会缓存上次使用的正则表达式。准确地说,是最后 100 个正则表达式,尽管我为此获得的唯一引用是 Jan Goyvaerts 和 Steven Levithan 的 Regular Expression Cookbook。

关于python - 使用正则表达式输入创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25411441/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com