我想做这样的事情:
c:\data\> python myscript.py *.csv
并将目录中的所有.csv文件传递给我的python脚本(这样sys.argv
包含["file1.csv", "file2.csv"]
等。)
但sys.argv
只是收到["*.csv"]
,表示通配符未展开,因此无效。
我觉得有一种简单的方法可以做到这一点,但无法在Google上找到它。有什么想法吗?
答案 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