2012-02-18 15 views
6

を使用して、文字列内の文字をエスケープは、私はこのようなPythonの3.2で文字列があるとしましょう:アンエスケープは、Python 3.2

'\n' 

私はコンソールに()、それを印刷するとき、それは明らかに、新しい行として表示されます。私が望むのは、バックスラッシュとnの後に文字通りそのまま印刷できることです。さらに、\ tなどのエスケープされたすべての文字に対して、これを行う必要があります。だから私は、次のように一般的なケースのために、働くだろう、ということ()関数のアンエスケープを探しています:

>>> s = '\n\t' 
>>> print(unescape(s)) 
'\\n\\t' 

はその文字通りの代替品にエスケープ文字の辞書を構築することなく、Pythonで、このことは可能ですか?

(誰もが興味を持っている場合は、私は、コマンドライン上の外部プログラムに文字列を渡す必要があるので、私はこれをやっている理由は、このプログラムは、すべての標準的なエスケープシーケンスを理解している。。)

+0

あなたは私が、「1つのコマンドラインを」と言うときあなたが実際にstdoutを使っていると仮定します。この場合、データを渡すプログラムは問題なく '\ n'などを消費しなければなりません。つまり、この2番目のプログラムに渡された後にデータを印刷すると、 '\ n'がまだそこに残っていることがわかります。あなたが本当にそれをエスケープしたいのでなければ。しかし、最初にチェックしてください。もし2番目のプログラムで余分な '\'を取り除くだけなら、おそらく間違っているでしょう。 – Endophage

+0

私はmyutilityと呼ばれるコマンドラインプログラムを持っています。 'myutility -i \ n' 文字列をエスケープしないと、\ nが渡されることはありません。-iは空とみなされます引数。 –

答えて

11

\のリテラル文字列の特殊な扱いを防ぐには、r接頭辞を使用できます。

あなたは改行記号( ord(s) == 10)を含む文字列を持っていて、Pythonのリテラルとして適切な形式に変換したい場合
s = r'\n' 
print(s) 
# -> \n 

は:

s = '\n' 
s = s.encode('unicode-escape').decode() 
print(s) 
# -> \n 
+0

非常に便利で、エンコード/デコードの良い例です – OregonTrail

5

編集:あなたの最後の発言に基づいて、おそらくUnicodeからコード化された表現にしたいと思うでしょう。これは、1つの方法です:

>>> s = '\n\t' 
>>> s.encode('unicode-escape') 
b'\\n\\t' 

あなたが例えば、お使いのシステムエンコーディングを使用し、その後エスケープするためにそれらを必要としない場合:

>>> s.encode('utf8') 
b'\n\t' 

あなたがサブプロセスでそれを使用することができます。

import subprocess 
proc = subprocess.Popen([ 'myutility', '-i', s.encode('utf8') ], 
         stdout=subprocess.PIPE, stdin=subprocess.PIPE, 
         stderr=subprocess.STDOUT) 
stdout,stderr = proc.communicate() 
+2

'repr()'は本当に魅力的ですが、これは意図した通りではありません。実際には一重引用符を含む文字列を出力するので、 ''' \\ n \\ r '' '。 – voithos

+0

私のPythonはそれを評価します "'\\ n \\ t" " 私はちょうど最初と最後の文字を削除することができます...? –

+2

@MikeyCee:もっと良い選択肢については編集をご覧ください。 – bernie