2011-09-14 25 views
1
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 , "'" 

輸出是爲什麼sys.argv []中有空格?

蟒蛇count_words.py -b -i football.txt目標

尋找在 'football.txt' '目標'

爲什麼會出現'goal'和'football.txt'之前和之後的空間?當我嘗試打印str文件名自己變量時,它們沒有這些空格。

我也試過在打印中使用str.strip(),但沒有效果。

任何想法?

+0

你可以在python中使用'if 5 rplnt

+0

5

回答

7

的空間是不是sys.argv,它是由原因引起的打印時使用逗號。嘗試

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

並儘量避免影響內建str

0

打印用空格分隔它的參數。更好地使用str.format。

3

這是您的打印聲明中的逗號。如果您使用以下它會工作:

打印「尋找在‘%s’的‘%s’的」%(STR,文件名)

2

print語句在其每個參數之間打印一個空格。請參閱print statement的文檔:

除非輸出系統認爲它位於行首,否則在寫入每個對象(轉換和寫入)之前寫入一個空格。

你可以嘗試使用字符串連接來代替:

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

或更好,但使用str.format

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

注意:請避免使用str作爲變量名稱。

4

這是因爲,您將單獨字符串的print語句,而不是連接它們連接成一個字符串,並一氣呵成打印出來:

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

注意,連接字符串是相對昂貴的:這是更好地使用插值,如下:

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

其他已經回答了您的空間問題。

其他一些建議:

STR()是一個內置的功能,所以沒有指定任何東西,或者你以後可能會想知道爲什麼它,當你想使用它不起作用。

另外:

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

幾乎是一樣的:

insensitive = "-i" in sys.argv 
1

另一個建議,而不是自行解析argv的,你應該嘗試OptionParser,讓您處理的Linux樣式選項/標誌。

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] 
相關問題