【问题标题】:glob is unable to extract all the fies from the command line variableglob 无法从命令行变量中提取所有文件
【发布时间】:2019-08-05 15:46:30
【问题描述】:

我在我的 python 程序中使用 glob.glob 命令,当我在 python 脚本中给出整个路径时它工作正常。如果我将路径作为命令行参数给出,glob 不起作用。

 path=r'/home/*/sale'
 all = glob.glob(path + "/x.txt")
 print all

 Output:

 ['/home/x1/sale/x.txt', '/home/x2/sale/x.txt']

但是当我从下面的参数中执行路径时,它不起作用。

 path = sys.argv[1]
 all = glob.glob(path + "/x.txt")
 print all
 Output:

 ['/home/x1/sale/x.txt']

它只拾取第一个文件。

有人可以帮助我了解我在这里缺少什么。谢谢!

【问题讨论】:

  • 请编辑您的帖子以包含您在调用代码时使用的命令行参数
  • 当您在命令行中使用* 时,系统可能会将其替换为值。您可能必须在命令行中将文本放在单个配额标记 '' 中。检查您在sys.arg[1] 中拥有的内容 - 您可能拥有/home/x1/sale。还要检查您是否没有 sys.arg[2]'/home/x2/sale'

标签: python glob


【解决方案1】:

当您在命令行中使用* 时,系统(Linux 或更确切地说是bash)将其替换为值。

所以你跑了

script.py /home/*/sale

bash 将其替换为

script.py /home/x1/sale /home/x2/sale 

你在sys.argv[1]中有/home/x1/sale,在sys.argv[2]中有/home/x2/sale

您必须在命令行中将文本放在单个配额标记 ' ' 中。

script.py '/home/*/sale'

它不会替换* 和系统变量(如$HOME

或双配额标记" ",它不会替换*,但会替换变量。

script.py "/home/*/sale"

【讨论】:

  • ... 但是正确的方法当然是循环 sys.argv[1:] 并获取所有命令行参数,并让用户根据需要在命令行上使用 globbing到。
  • 感谢您添加引号解决了问题
猜你喜欢
  • 2022-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 1970-01-01
  • 2016-10-19
相关资源
最近更新 更多