[英]Compare if two items from os.listdir are similar?
忽略這個問題。 這與我需要提出的實際問題完全不同。 對於已經回答問題的人,我很抱歉。 希望這會在將來對某人有所幫助。
在這里閱讀新線程: 打開從os.listdir()找到的文件並比較其中的行?
基本上,我正在運行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。
應該這樣做:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.