16

我想做这样的事情:

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

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

但是sys.argv只是收到["*.csv"]表明通配符没有被扩展,所以这不起作用。

我觉得有一种简单的方法可以做到这一点,但在谷歌上找不到。有任何想法吗?

4

3 回答 3

24

您可以使用 glob 模块,这样您就不会依赖特定外壳的行为(好吧,您仍然依赖外壳不扩展参数,但至少您可以通过转义通配符在 Unix 中实现这一点:-) )。

from glob import glob
filelist = glob('*.csv') #You can pass the sys.argv argument
于 2009-01-01T23:15:46.487 回答
16

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

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

import glob, sys

for arg in glob.glob(sys.argv[1]):
    print "Arg:", arg
于 2009-01-01T23:19:50.610 回答
0

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

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

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

for _file in sys.argv[1:]:
    # do something on file
于 2021-04-15T09:15:49.077 回答