Передача аргументов с подстановочными знаками в скрипт Python - PullRequest
14 голосов
/ 02 января 2009

Я хочу сделать что-то вроде этого:

c:\data\> python myscript.py *.csv

и передать все файлы .csv в каталоге моему скрипту на python (например, sys.argv содержит ["file1.csv", "file2.csv"] и т. Д.)

Но sys.argv просто получает ["*.csv"], указывающий, что подстановочный знак не был расширен, поэтому это не работает.

Мне кажется, что есть простой способ сделать это, но я не могу найти его в Google. Есть идеи?

Ответы [ 2 ]

23 голосов
/ 02 января 2009

Вы можете использовать модуль glob, таким образом, вы не будете зависеть от поведения конкретной оболочки (ну, вы все равно зависите от оболочки, не расширяющей аргументы, но, по крайней мере, вы можете добиться этого в Unix избегая подстановочных знаков :-)).

from glob import glob
filelist = glob('*.csv') #You can pass the sys.argv argument
13 голосов
/ 02 января 2009

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

Винко прав: глобальный модуль выполняет свою работу:

import glob, sys

for arg in glob.glob(sys.argv[1]):
    print "Arg:", arg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...