Есть пара вещей, которые могут происходить.Одна возможность состоит в том, что ../User/Desktop/Data/*.png
не соответствует ни одному файлу, поэтому не раскрывается.Это может произойти только в UNIX-подобной оболочке (или, я полагаю, в PowerShell).Другая возможность заключается в том, что вы используете cmd.exe
в Windows, которая просто не использует подстановочные знаки вообще.Учитывая, что вы используете приглашение Anaconda в Windows, я бы предпочел использовать в качестве объяснения последнюю возможность.
Поскольку вы ищете список всех PNG в папке, вам не нужно полагаться наоболочка вообще.Есть много способов сделать то же самое в Python, с интеграцией в argparse
.
* 1009 и без нее. Давайте начнем с реализации функции листинга.Для данного каталога есть несколько способов получить список всех PNG в нем:
Использовать glob.glob
( рекомендуемая опция ).Это может быть использовано в подкаталогах или нет, в зависимости от того, что вы хотите:
mydir = '../User/Desktop/Data/'
pngs = glob.glob(os.path.join(mydir, '*.png'))
Чтобы перейти в подпапки, просто добавьте параметр recursive=True
только для ключевых слов.
Используйте os.walk
.Это гораздо более гибко (и, следовательно, требует больше работы), но также позволяет использовать рекурсивные или нерекурсивные решения:
mydir = '../User/Desktop/Data/'
pngs = []
for path, dirs, files in os.walk(mydir):
pngs.extend(f for f in files if f.lower().endswith('.png'))
del dirs[:]
Чтобы включить рекурсию, просто удалите строку del dirs[:]
, которая подавляет поиск в подкаталогах.
Связанный метод, который всегда нерекурсивен, заключается в использовании os.listdir
, что является грубым эквивалентом Pythons для команд ls
или dir
:
mydir = '../User/Desktop/Data/'
pngs = [f for f in os.listdir(mydir) if f.lower().endswith('.png')]
Эта версия не проверяет, является ли что-то файлом.Предполагается, что у вас нет имен папок, заканчивающихся на .png
.
Допустим, вы выбрали один из этих методов и создали функцию, которая принимает папку и возвращает список файлов.:
def list_pngs(directory):
return glob.glob(os.path.join(directory, '*.png'))
Теперь, когда вы знаете, как составлять список файлов в папке, вы можете легко подключить это к argparse
на любом уровне.Вот пара примеров:
Просто возьмите все свои каталоги из аргумента и выведите их впоследствии:
parser.add_argument("-p", "--pics", action='store', help="picture files", required=True)
После обработки аргументов:
print(list_pngs(args.pics))
Интеграция напрямую в argparse
с аргументом type
:
parser.add_argument("-p", "--pics", action='store', type=list_pngs, help="picture files", required=True)
Теперь вы можете использовать аргумент напрямую, поскольку он будет преобразован в список напрямую:
print(args.pics)