Подтвердить что ты не робот

Поиск файла с использованием шаблона

Я хочу получить список имен файлов с шаблоном поиска с подстановочным знаком. Как:

getFilenames.py c:\PathToFolder\*
getFilenames.py c:\PathToFolder\FileType*.txt
getFilenames.py c:\PathToFolder\FileTypeA.txt

Как я могу это сделать?

4b9b3361

Ответ 1

Вот так:

>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']

Это происходит прямо здесь: http://docs.python.org/library/glob.html

Ответ 2

glob полезен, если вы делаете это внутри python, однако ваша оболочка не может проходить в * (я не знаком с оболочкой Windows).

Например, когда я делаю следующее:

import sys
print sys.argv

В моей оболочке я печатаю:

$ python test.py *.jpg

Я получаю это:

['test.py', 'test.jpg', 'wasp.jpg']

Обратите внимание, что argv не содержит "*.jpg"

Важным уроком здесь является то, что большинство оболочек расширят звездочку в оболочке, прежде чем она будет передана вашему приложению.

В этом случае, чтобы получить список файлов, я просто сделал бы sys.argv[1:]. Кроме того, вы можете избежать *, чтобы python увидел литерал *. Затем вы можете использовать модуль glob.

$ getFileNames.py "*.jpg"

или

$ getFileNames.py \*.jpg

Ответ 3

from glob import glob
import sys

files = glob(sys.argv[1])

Ответ 4

Я добавляю это к предыдущему, потому что нашел это очень полезным, когда вы хотите, чтобы ваши скрипты работали с несколькими оболочками и с несколькими параметрами, используя *.

Если вы хотите что-то, что работает на всех оболочках, вы можете сделать следующее (все еще используя glob):

>>> import glob
>>> from functools import reduce # if using python 3+
>>> reduce(lambda r, x: r + glob.glob(x), sys.argv[1:], [])

Обратите внимание, что он может создавать дубликат (если у вас есть файл test, и вы даете t* и te*), но вы можете просто удалить их с помощью set:

>>> set(reduce(lambda r, x: r + glob.glob(x), sys.argv[1:], []))