Передача нескольких файлов со звездочкой в оболочку python в Windows
Я выполняю упражнения Google Python, и мне нужно сделать это из командной строки:
python babynames.py --summaryfile baby*.html
Где python
- оболочка Python, babynames.py
- это программа Python, --summaryfile
- это аргумент, который будет интерпретироваться моей программой babynames
, а baby*.html
- список файлов, соответствующих этому выражению. Однако это не работает, и я не уверен, является ли проблема командной оболочкой Windows или Python. Выражение baby*.html
не распространяется на полный список файлов, вместо этого оно передается строго как строка. Можно ли передать несколько файлов в программу Python таким образом?
Ответы
Ответ 1
Командный интерпретатор Windows не расширяет подстановочные знаки, как это делают оболочки UNIX, прежде чем передавать их в исполняемую программу или script.
python.exe -c "import sys; print sys.argv[1:]" *.txt
Результат:
['*.txt']
Решение: используйте модуль glob
.
from glob import glob
from sys import argv
for filename in glob(argv[1]):
print filename
Ответ 2
Кроссплатформенность:
import glob
if '*' in sys.argv[-1]:
sys.argv[-1:] = glob.glob(sys.argv[-1])
continue...
Ответ 3
Использование argparse:
import argparse
parser=argparse.ArgumentParser()
parser.add_argument(dest='wildcard',nargs='+')
print(parser.parse_args().wildcard)
Ответ 4
Вы можете сделать это из UNIX-подобных оболочек, прямо в том, что вы писали. В моем случае Git Bash выполнил эту работу - он принимает звездочки в качестве входных данных и обрабатывает их правильно.