2013-05-21 3 views
0

Игнорировать этот вопрос. Это совершенно другое, чем вопрос, который мне нужно задать. Прошу прощения за тех, кто уже ответил на вопрос. Надеюсь, это поможет кому-то в будущем.Сравните, если два элемента из os.listdir похожи?

Читайте новую тему здесь: 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

«похож» или «один содержит другой» и должно ли оно быть чувствительно к регистру? –

+0

Ну, вот где это усложняется. В принципе, люди могут вручную создавать свои профили для этой программы и называть их независимо от того, что они хотят (так, по сути, они могли бы назвать его asdfasdfasf), но моя программа всегда будет генерировать $ NetworkSSID_wifiz. Так что я просто понял, что это может работать не полностью. Однако в каждом файле есть «ESSID = '$ NetworkSSID». Поэтому мне действительно нужно открыть файл и сравнить эти строки для каждого отдельного файла. Редактирование основного вопроса, чтобы отразить это. –

+0

Это резкое изменение вопроса, полностью аннулирование всех существующих ответов. Пожалуйста, верните изменение и задайте новый вопрос. – user4815162342

ответ

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 
+0

отличный ответ, +1 – user4815162342

Смежные вопросы