忽略此问题。这与我需要提出的实际问题完全不同。对于已回答问题的人,我很抱歉。但是,希望这将有助于未来的人。
在此处阅读新主题:Opening files found from os.listdir() and comparing lines inside?
基本上,我正在运行os.listdir()来获取文件列表,然后尝试比较两个不同的文件是否具有相似的名称。我该怎么做呢?
基本上,代码目前是这样的:
config_dir = "/etc/netctl/"
profiles = os.listdir(config_dir)
for i in profiles:
if os.path.isfile(config_dir + i):
if i in i:
print "True"
else:
pass
但是,我不确定我会用什么来检查名字中的相似之处。但是,我知道“如果我在我身边”只是检查同一个词...但我不知道如何保存最后一个......
我也尝试过:
i2 = ""
profiles = os.listdir(config_dir)
for i in profiles:
if os.path.isfile(config_dir + i):
if i2 == "":
i2 = i
print i2
elif i2 == i:
continue
if i2 in i:
print "true"
else:
pass
但是,我认为我可能会过度思考这一点。这是os.listdir的输出:
['hooks', 'interfaces', 'examples', 'ddwrt', 'MomAndKids_wifiz', 'backups', 'MomAndKids']
文件是ddwrt MomAndKids_wifiz和MomAndKids。基本上,我希望它检测名称“MomAndKids”和“MomAndKids_wifiz”是相似的,然后返回True。
答案 0 :(得分:1)
这应该这样做:
from difflib import SequenceMatcher
from glob import glob
from os import path
config_dir = '/etc/netctl'
min_ratio = 0.90 # 90%
profiles = dict((i, {'full_path': v, 'matches': [], 'file_name': path.splitext(path.split(v)[-1])[0]}) for (i, v) in enumerate(glob(config_dir + '/*.*')))
for K, V in profiles.items():
sm = SequenceMatcher(a=V['file_name'], b='')
for k, v in profiles.items():
if K == k or k in V['matches']:
continue
sm.set_seq2(v['file_name'])
if sm.ratio() > min_ratio:
V['matches'].append(k)
v['matches'].append(K)
# display the output
for k, v in profiles.items():
print k, v