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(),但没有效果。
有什么想法吗?
答案 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。