2011-10-29 54 views
2

我已經做了一個快速的Python腳本,從ASCII轉換爲Unicode並返回。我通過argparse輸入輸入,因此它必須包含在引號內,即./Converter。 py -a「這是我的朋友」,腳本會輸出逗號分隔的Unicode值輸入包含「或」與argparse

當然''會打破輸入,我知道我可以通過在它前面放一個\由於某種原因這將停止添加逗號,例如:

./Convert.py "\"hi\"" 

輸出:

34104, 105, 34 

正如你所看到的,應該有一個逗號和34和104這之間的空間是代碼:

def CharCode(text): 
    print "Unicode values are:", 
    length = len(text) 
    for letter in text: 
      Unicode_values = ord(letter) 
      sys.stdout.write(str(Unicode_values)) 
      if letter != text[-1]: 
        sys.stdout.write(', ') 
    sys.stdout.write('\r\n') 

如果我刪除

if letter != text[-1]: 

這將停止問題發生,但然後在Unicode值字符串的最後添加逗號,這是我不想要的。

因此,我的問題是a)如何防止這種情況發生?和b)有沒有更好的方式來接受這種類型的輸入,比如我會更好地設置raw_input嗎?

任何幫助非常感謝,謝謝!

回答

3

你的條件

if letter != text[-1]: 

說寫一個逗號和空格字符時的最後一個字符不等於最後一個字符的值 - 在這種情況下,'(你的第一個字符)是相同的字符作爲'(你的最後一個字符)。您應該更改條件以檢查它是否是最後一個字符,而不是該字符與最後一個字符相同。你可以用

for i, letter in enumerate(text): 
    #stuff 
    if i < len(text) - 1: 
     sys.stdout.write(', ') 

,但是做的更好,這可能是使用join方法:

print u', '.join([str(value) for value in unicode_values]) 

此外,如果你不希望有使用引號,使你的shell把你的腳本你作爲一個arg輸入,argparse具有nargs選項(docs),如'+'用於收集儘可能多的參數。然而,你仍然必須逃避你想要的引號,並且你必須對這些引號之間的空格做出假設。 (類似' '.join(args)只會近似您的輸入)

+0

偉大的答案夥計,正是我所期待的 - 非常感謝!我會嘗試他們兩個 - 乾杯=) – Jingo