Как установить соответствие шаблону в функции Python SMBCoonect listPath - PullRequest
0 голосов
/ 02 июля 2018

SMBConnect имеет следующую функцию listPath, которая перечисляет содержимое данного каталога.

listPath (service_name, path, search = 55, pattern = '*', timeout = 30) Получить список каталогов файлов / папок по пути

Параметры:
service_name (string / unicode) - имя общей папки для пути

путь (строка / юникод) - путь относительно имени_сервиса, где нам интересно узнать о его файлах / подпапках.

search (integer) - целочисленное значение, составленное из побитового ИЛИ из битов SMB_FILE_ATTRIBUTE_xxx (см. Smb_constants.py). Значение поиска по умолчанию будет запрашивать все доступные только для чтения, скрытые, системные, архивные файлы и каталоги.

pattern (string / unicode) - фильтр, применяемый к результатам перед возвратом клиенту.

Возвращает:
Список экземпляров smb.base.SharedFile.

newConn=SMBConnection(arguments.username, password, DEFAULT_CLIENT_NAME, arguments.hostname, domain=arguments.domain,
            use_ntlm_v2=True, is_direct_tcp=True)
        assert newConn.connect(ip_address, 445, timeout=60)
        files = newConn.listPath('C$', '/' + 'testing', '*.pdf')
        for file in files:
            print(file.filename)

Я не могу заставить сопоставление с образцом измениться на что-то конкретное. Выше я хочу распечатать только те имена файлов, которые содержат «.pdf» в списке. Вместо этого, когда код выполняется, я просто получаю ВСЕ файлы. Никаких ошибок или чего-либо еще. Я пробовал с и без «*» и «.» и получите те же результаты.

Ответы [ 2 ]

0 голосов
/ 17 июля 2018

Итак, мы получили его для работы с классом re в качестве обходного пути от функции listPath SMBConnection, используя его вариант, который работает с созданным объектом SMBConnection. функция ListPath все еще используется, но не является ее частью шаблона. Я построил структуру If-else для обработки ввода arg и регулярных выражений.

extensions = ['pdf', 'doc']
filenames = ['foobar.pdf', 'bar.doc']
for extension in extensions:
    compiled = re.compile('\.{0}$'.format(extension))
    for filename in filenames:
        results = re.search(compiled, filename)
        print results 
0 голосов
/ 02 июля 2018

Вы можете использовать регулярное выражение .+\.pdf.

.+: соответствует всем символам, кроме символа новой строки 1 или более раз.
\.pdf: экранирует символ dot, поскольку символы . имеют особое значение в регулярных выражениях и выполняют поиск pdf после .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...