我是Python的新手,所以请原谅我问了一些愚蠢的问题。 从一个文本文件中,一个字典被用作传递/块过滤器。 textfile包含地址和一个block或allow,如“00209568,allow”或“0011*,allow”(不带引号)。 搜索输入是一个包含完整代码的字符串,如“001180000”。 如何评估搜索项是否在字典中并使其与“0011*,allow”行匹配? 非常感谢你的努力!你知道吗
筛选器字典由以下内容组成:
def loadFilterDict(filename):
global filterDict
try:
with open(filename, "r") as text_file:
lines = text_file.readlines()
for s in lines:
fields = s.split(',')
if len(fields) == 2:
filterDict[fields[0]] = fields[1].strip()
text_file.close()
except:
pass
检查代码(ccode)是否在字典中:
if ccode in filterDict:
if filterDict[ccode] in ['block']:
continue
else:
if filterstat in ['block']:
continue
过滤器文件类似于:
00209568,允许 000923993,允许 0011*,允许
如果您可以使用} 为您做一些艰苦的工作:
re
,那么您不必担心通配符,而是让^{打印内容:
函数将返回一个规则列表。它们的顺序与它们在配置行中出现的顺序相同。所以你可以很容易地选择最后一条或第一条你感兴趣的规则。你知道吗
或者过早地打破循环,如果你可以假设没有两个裁决会干涉。你知道吗
示例:
001180000
只与0011*,allow
匹配,因此唯一适用的规则是allow
。你知道吗001180001
首先由0011*,allow
匹配,所以您将得到allow
和前面一样。但是,它也与001180001,block
匹配,因此block
也将被添加到规则中。你知道吗如果文件中的通配符条目具有固定长度(例如,您只需要支持
0011*,allow
这样的行,而不需要00110*,allow
或0*,allow
或任何其他任意数量的数字后跟*
),则可以使用嵌套字典,其中外键是通配符条目的已知部分。你知道吗然后,当解析文件并到达第
0011*,allow
行时,不需要进行任何匹配。你所要做的就是检查'0011'
是否存在。粗略的例子:如果您确实需要支持任意长度的通配符条目,您将不得不求助于循环遍历字典(因此不必从使用字典开始):
相关问题 更多 >
编程相关推荐