我想做这样的事情:
c:\data\> python myscript.py *.csv
并将目录中的所有 .csv 文件传递给我的 python 脚本(例如sys.argv
包含["file1.csv", "file2.csv"]
等)
但是sys.argv
只是收到["*.csv"]
表明通配符没有被扩展,所以这不起作用。
我觉得有一种简单的方法可以做到这一点,但在谷歌上找不到。有任何想法吗?
我想做这样的事情:
c:\data\> python myscript.py *.csv
并将目录中的所有 .csv 文件传递给我的 python 脚本(例如sys.argv
包含["file1.csv", "file2.csv"]
等)
但是sys.argv
只是收到["*.csv"]
表明通配符没有被扩展,所以这不起作用。
我觉得有一种简单的方法可以做到这一点,但在谷歌上找不到。有任何想法吗?
您可以使用 glob 模块,这样您就不会依赖特定外壳的行为(好吧,您仍然依赖外壳不扩展参数,但至少您可以通过转义通配符在 Unix 中实现这一点:-) )。
from glob import glob
filelist = glob('*.csv') #You can pass the sys.argv argument
在 Unix 中,shell 扩展通配符,因此程序得到扩展的文件名列表。Windows 不这样做:shell 将通配符直接传递给程序,程序必须自己扩展它们。
Vinko 是对的:glob 模块完成了这项工作:
import glob, sys
for arg in glob.glob(sys.argv[1]):
print "Arg:", arg
如果你的脚本是一个实用程序,我建议你在你.bashrc
的目录中定义一个这样的函数来调用它:
myscript() {
python /path/myscript.py "$@"
}
然后整个列表被传递给你的python,你可以像这样处理它们:
for _file in sys.argv[1:]:
# do something on file