繁体   English   中英

python的glob只返回第一个结果

[英]python's glob only returning the first result

我真的很难过这个。

我有一个简单的python包装器,看起来像这样:

import glob

for found in glob.glob(filename):
  if not os.path.isdir(found):
    my_module.do_stuff(found)

其中filename已从sys.argv读入。

当我在交互式shell或hello world脚本中尝试glob时,我会得到(在这种情况下为5个)文件的完整列表。 但是,当我在这种情况下使用它时,我只获得第一个(按字母顺序)。

我已经通过在数组中捕获glob.glob的结果来检查,果然,它只有一个len() ,即使文件名只是'*'

我应该怎么可能那样做休息glob ?!

完整的代码文件,万一你可以发现我的问题:

#! /usr/bin/python
import pynet.quadrons as q
import os, glob

def print_usage():
  print """
    (blah blah big long string.)

  """

if __name__ == "__main__":
  import sys
  if len(sys.argv) < 2:
    print_usage()
    exit()

  filename = ''

  try:
    filename = sys.argv[1]
  except:
    print "error parsing arguments."
    print_usage()
    exit()

  for found in glob.glob(filename):
    if not os.path.isdir(found):
      q.load_and_analyse_file(found)

在Python脚本看到它之前,shell正在扩展glob。 因此,您的Python脚本会看到与sys.argv[1]中的glob匹配的第一个完整文件名,将其传递给glob() ,当然它只匹配一个文件。

使用单引号引用shell中的参数,以便shell不扩展它,或者只是允许shell进行扩展并迭代sys.argv所有项(第一项除外)。

值得注意的是,在Windows上,shell 执行通配,因此如果您的脚本需要跨平台工作,则应该遍历sys.argv[1:]并对每个项目进行循环

调试101: print len(sys.argv[1:]), repr(sys.argv[1:])

迎合一个或多个文件名和/或一个或多个模式:

for pattern in sys.argv[1:]:
    for filename in glob.glob(pattern):
        do_something_with(filename)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM