Передача аргументов с помощью подстановочных знаков на Python script

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

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

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

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

Я чувствую, что есть простой способ сделать это, но не могу найти его в Google. Любые идеи?

Ответы

Ответ 1

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

from glob import glob
filelist = glob('*.csv') #You can pass the sys.argv argument

Ответ 2

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

Vinko прав: модуль glob выполняет задание:

import glob, sys

for arg in glob.glob(sys.argv[1]):
    print "Arg:", arg