gpt4 book ai didi

需要在 argv 上加引号的 python glob 模块

转载 作者:太空宇宙 更新时间:2023-11-04 01:14:07 24 4
gpt4 key购买 nike

test.py 代码有什么问题?

$ ls *csv
test1.csv test2.csv test3.csv test4.csv
$ python test.py *csv
test1.csv
$ python test.py '*csv'
test1.csv
test2.csv
test3.csv
test4.csv
$ cat test.py
#!/usr/bin/python

import sys,glob

for filename in glob.glob(sys.argv[1]):
print filename
$

最终我不想被迫用引号将参数传递给脚本。

编辑:在对已接受的答案发表评论后发现问题

如果 shell 扩展有效,我就不必使用 glob,所以循环是:

for filename in sys.argv[1:]:
print filename

谢谢!

最佳答案

这不是 glob 或 Python 的任何特定内容,它只是通配符在 shell 中的工作方式。您可以通过将脚本替换为刚刚执行的脚本来看到这一点:

import sys
print sys.argv

在第一个示例中,*.csv 在脚本运行之前由 shell 扩展为多个文件名。您可以通过打印 sys.argv 来查看 - 所有匹配的文件名都将在那里。

如果您不希望 shell 扩展通配符,那么您需要使用 \ 引用或转义它们。 (这里有一个极端情况 - 如果没有匹配的文件,bash 会将 *.csv 传递给您的脚本。默认情况下,zsh 会在这种情况下发出错误信号。)

显然你可以关闭 shell 中的 glob 扩展:

set -f

但我不认为那是你想要的。

很多关于扩展的信息here .

关于需要在 argv 上加引号的 python glob 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25746144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com