为什么sys.argv []中有空格?

时间:2011-09-14 12:21:27

标签: python

argc = len(sys.argv)

if (argc < 3 or argc > 5):
    printusage()
    sys.exit()

insensitive = 1 if ("-i" in sys.argv) else 0
boundaries = 1 if ("-b" in sys.argv) else 0

filename = sys.argv[argc-2]
str = sys.argv[argc-1]

print "Looking for '", str , "' in '" , filename , "'"

输出

  

python count_words.py -b -i football.txt goal

     

在'football.txt'中寻找'目标'

为什么'goal'和'football.txt'之前和之后都有空格?当我尝试自己打印 str filename 变量时,它们没有这些空格。

我也尝试在打印中使用str.strip(),但没有效果。

有什么想法吗?

7 个答案:

答案 0 :(得分:7)

空格不在sys.argv,这是由于在打印时使用逗号造成的。尝试

print "Looking for '%s' in '%s'" % (str, filename)

尽量避免遮挡内置str

答案 1 :(得分:4)

这是因为你将单独的字符串传递给print语句,而不是将它们连接成一个字符串并一次打印出来:

>>> print "a", "b"
a b
>>> print "a" + "b"
ab

请注意,连接字符串相对较贵:最好使用插值,如下所示:

>>> print "A %s with %s" % ("string", "placeholders")
A string with placeholders

答案 2 :(得分:3)

这是你的印刷声明中的逗号。如果你使用以下它将工作:

打印“在'%s'中查找'%s'”%(str,filename)

答案 3 :(得分:2)

print语句在每个参数之间打印一个空格。请参阅print statement的文档:

  

在每个对象(转换和)写入之前写入一个空格,除非输出系统认为它位于一行的开头。

您可以尝试使用字符串连接:

print "Looking for '" + s + "' in '" + filename + "'"

或更好,使用str.format

print "Looking for '{0}' in '{1}'".format(s, filename)

注意:避免使用str作为变量名。

答案 4 :(得分:1)

其他人已经回答了你的空格问题。

其他一些建议:

str()是一个内置函数,因此不要为它指定任何内容,或者您​​可能想知道为什么它在您想要使用它时不起作用。

此外:

insensitive = 1 if ("-i" in sys.argv) else 0

与:

非常相似
insensitive = "-i" in sys.argv

答案 5 :(得分:1)

另一个建议是,您应该尝试使用OptionParser来处理linux样式选项/标记,而不是自己解析argv。

from optparse import OptionParser
PARSER = OptionParser(usage="""usage: %%prog [-b] file_name""")
PARSER.add_option("-b", "--boundaries", action="store_true", dest="boundaries", help="Boundaries ?")
options, arguments = PARSER.parse_args()
if options.boundaries:
    # -b was activated...
file_name = arguments[0]

答案 6 :(得分:0)

Print用空格分隔其参数。更好地使用str.format。