簡體   English   中英

比較os.listdir中的兩個項目是否相似?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM