2016-05-13 1 views
0

проверка пути папки с помощью «*»Путь к папке проверки python с *

вот что я пробовал.

import os 

    checkdir = "/lib/modules/*/kernel/drivers/char" 
    path = os.path.exists(checkIPMI_dir) 
    print path 

Ложные

это всегда будет печатать значение False, есть другой способ, что я могу напечатать его правда? я знаю, когда я поставил статический путь, он может

import os 

    checkdir = "/lib/modules" 
    path = os.path.exists(checkIPMI_dir) 
    print path 

я косяк ставить статическим, потому что у меня есть несколько ОС Linux, которая использует другую версию ядра , там числа не будет таким же.

+0

См. Http://stackoverflow.com/questions/2186525/use-a-glob-to-find-files-recursively-in-python – Selcuk

+0

Примитивные вызовы файловой системы не будут искать специальные символы и пытаться сделать сопоставление шаблонов на них (что, возможно, превратит одну строку в несколько согласованных путей или вообще не будет). Вам нужно расширить свои шаблоны * до того, как вы назовете низкоуровневые вещи, такие как 'os.path.exists'. Если в строках, которые они указаны, появляется звездочка, они буквально будут искать звездочку в имени файла, как и следовало ожидать. –

+0

Возможно, есть путь, установленный на каждой машине/настройке через переменную окружения? И используйте это в своем коде. – davo36

ответ

0

Это не может решить вашу проблему, но некоторое время назад мне нужно, чтобы быть в состоянии рекурсии неизвестного количества раз через структуру каталогов, чтобы найти файл, так что я написал эту функцию:

import os 
import fnmatch 
def get_files(root, patterns='*', depth=1, yield_folders=False): 
    """ 
    Return all of the files matching patterns, in pattern. 
    Only search to teh specified depth 
    Arguments: 
     root - Top level directory for search 
     patterns - comma separated list of Unix style 
        wildcards to match NOTE: This is not 
        a regular expression. 
     depth - level of subdirectory search, default 
       1 level down 
     yield_folders - True folder names should be returned 
         default False 
    Returns: 
     generator of files meeting search criteria for all 
     patterns in argument patterns 
    """ 
    # Determine the depth of the root directory 
    root_depth = len(root.split(os.sep)) 
    # Figure out what patterns we are matching 
    patterns = patterns.split(';') 

    for path, subdirs, files in os.walk(root): 
     # Are we including directories in search? 
     if yield_folders: 
      files.extend(subdirs) 
     files.sort() 

     for name in files: 
      for pattern in patterns: 
       # Determine if we've exceeded the depth of the 
       # search? 
       cur_depth = len(path.split(os.sep)) 
       if (cur_depth - root_depth) > depth: 
        break 

       if fnmatch.fnmatch(name, pattern): 
        yield os.path.join(path, name) 
        break 

С эта функция вы можете проверить, существует ли файл со следующим:

checkdir = "/lib/modules/*/kernel/drivers/char" 
matches = get_files(checkdir, depth=100, yield_folders=True) 
found = True if matches else False 

Все это может быть излишним, но он должен работать!

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