2011-10-29 7 views
2

私は、UnicodeからASCIIに変換して戻すクイックPythonスクリプトを作った。私はargparse経由で入力しているので、./Converterのように引用符で囲む必要がある。このスクリプトはUnicodeの値をコンマで区切って出力します。"or"を含む入力を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を設定する方が良いでしょうか?

ご協力いただきありがとうございます!

if letter != text[-1]: 

は、最後の文字が最後の文字の値に等しくないときにカンマとスペース文字を書くことを言う

答えて

3

あなたの条件 - このケースでは、 '(あなたの最初の文字)は、同じ文字であります(あなたの最後の文字)として。条件が最後の文字であることを確認するために変更する必要があります。文字が最後の文字と同じではありません。

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

さらに、あなたはシェルがあなたのスクリプトを送信するために引用符を使用する必要がしたくない場合は:あなたは、参加方法を使用するのが良いかもしれない

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

が、より良いでこれを行うことができますargparseにはというオプション(docs)があり、多くのargsを集めるための'+'があります。しかし、あなたはまだあなたが望む引用符をエスケープする必要があり、これらのargsの間の空白については前提を取らなければなりません。 (' '.join(args)のようなものはあなたの入力に近似しているに過ぎません)

+0

素晴らしい答えよ、ちょうど私が探していたものです。私はそれらを両方試してみる - 歓声=) – Jingo

関連する問題