代码之家  ›  专栏  ›  技术社区  ›  Kiv

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

  •  19
  • Kiv  · 技术社区  · 16 年前

    我想做这样的事情:

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

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

    但是 sys.argv 刚刚收到 ["*.csv"] 表示通配符未扩展,因此这不起作用。

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

    4 回复  |  直到 9 年前
        1
  •  23
  •   Vinko Vrsalovic    16 年前

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

    from glob import glob
    filelist = glob('*.csv') #You can pass the sys.argv argument
    
        2
  •  16
  •   Ned Batchelder    16 年前

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

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

    import glob, sys
    
    for arg in glob.glob(sys.argv[1]):
        print "Arg:", arg
    
        3
  •  0
  •   Ahmad    4 年前

    如果您传递了多个通配符项(例如: python myscript.py *.csv *.txt )那么, glob(sys.argv[1] 可能无法切断它。您可能需要以下内容。

    import sys
    from glob import glob
    
    args = [f for l in sys.argv[1:] for f in glob(l)]
    

    即使某些参数中没有通配符,这也会起作用。 ( python abc.txt *.csv anotherfile.dat )