Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将带有通配符的参数传递给Python脚本_Python_Windows_Command Line_Arguments - Fatal编程技术网

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

将带有通配符的参数传递给Python脚本,python,windows,command-line,arguments,Python,Windows,Command Line,Arguments,我想这样做: c:\data\> python myscript.py *.csv 并将目录中的所有.csv文件传递给我的python脚本(例如,sys.argv包含[“file1.csv”、“file2.csv”]等) 但是sys.argv只接收到[“*.csv”]指示通配符未展开,因此这不起作用 我觉得有一个简单的方法可以做到这一点,但在谷歌上找不到。有什么想法吗?您可以使用glob模块,这样您就不会依赖于特定shell的行为(好吧,您仍然依赖于shell而不是扩展参数,但至少可以通

我想这样做:

c:\data\> python myscript.py *.csv
并将目录中的所有.csv文件传递给我的python脚本(例如,
sys.argv
包含
[“file1.csv”、“file2.csv”]
等)

但是
sys.argv
只接收到
[“*.csv”]
指示通配符未展开,因此这不起作用


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

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


在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

这不是“能”;对于windows,它是“必须”的。嗯,您也可以使用os.walk,因此严格来说它不是必须的:P@Vinko瓦萨洛维奇:是的。walk似乎比glob更麻烦。Glob不是必需的,但它非常适合这个问题。谢谢,正是我想要的。正是我想要的:)+1。请注意,如果
sys.argv[1]
是一个完全指定的文件名而不是通配符,这也可以很好地工作。在这种情况下,
glob.glob
只返回一个包含该文件名的列表。如果将一个参数转发到Python
script.py c:\path\*\subdir
glob生成一个列表,我以后可以使用该列表,它也会起作用。伟大的模块!
for _file in sys.argv[1:]:
    # do something on file