将带有通配符的参数传递给Python脚本

时间:2009-01-01 23:08:02

标签: python windows command-line arguments

我想做这样的事情:

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

并将目录中的所有.csv文件传递给我的python脚本(这样sys.argv包含["file1.csv", "file2.csv"]等。)

sys.argv只是收到["*.csv"],表示通配符未展开,因此无效。

我觉得有一种简单的方法可以做到这一点,但无法在Google上找到它。有什么想法吗?

3 个答案:

答案 0 :(得分:23)

你可以使用glob模块,这样你就不会依赖于特定shell的行为(好吧,你仍然依赖shell而不是扩展参数,但至少你可以在Unix中通过它来实现这一点)逃离通配符:-))。

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

答案 1 :(得分:13)

在Unix中,shell会扩展通配符,因此程序会获得扩展的文件名列表。 Windows不会这样做:shell将通配符直接传递给程序,程序必须自己扩展它们。

Vinko是对的:glob模块完成工作:

import glob, sys

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

答案 2 :(得分:0)

如果您的脚本是一个实用程序,我建议您在您的 .bashrc 中定义一个这样的函数以在目录中调用它:

myscript() {
   python /path/myscript.py $@ 
}

然后将整个列表传递给您的python,您可以像这样处理它们:

for _file in sys.argv[1:]:
    # do something on file