2012-02-18 21 views
6

Python 3.2 kullanarak bir dizede karakterlerin çıkışını böyle Python 3.2 bir dize olduğunu varsayalım. İstediğim şey, kelimenin tam anlamıyla bir ters eğik çizgi (n) izleyebilmesidir. Ayrıca, \ t gibi tüm kaçışan karakterler için bunu yapmam gerekiyor.çıkış kaldırma

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

onların literal değiştirmeler kaçan karakterlerin bir sözlük oluşturmak yoluyla olmadan Python bu mümkün mü: Ben, genel durum için, şöyle çalışacak bir işlev Unescape() arıyorum?

(vaka kimse ilgileniyor, ben bu yaptığını nedeni komut satırında harici bir program dize geçmesi gerekiyor, çünkü bu program, tüm standart çıkış sıralarını anlar olduğunu..)

+0

sana "tek komut satırını" derken Stdout aracılığıyla gerçekte kastettiğinizi varsayarsınız, bu durumda veriyi geçirdiğiniz program, '\ n' vb. Yani, eğer bu ikinci programa geçtikten sonra verileri yazdırdıysanız, '\ n' hala orada olurdu. Gerçekten kaçmak istemiyorsan. Ama önce şunu kontrol et, eğer ikinci programda ekstra '\' yı kaldırırsan, muhtemelen yanlış yapıyorsun. – Endophage

+0

Myutilite adı verilen bir komut satırı programım var. Böyle çağrılacak bekler: 'myutility -i \ n ' Sonra dize okunabilir hale yok hiç o hesapta geçirilen n \ uymayacaksan - bu boş olmasını -i üstlenecek argüman. repr 'Her ne kadar –

cevap

11

\'un bir özel dizede özel işlem yapmasını önlemek için r önekini kullanabilirsiniz:

Eğer bir satır sembolü ( ord(s) == 10) içeren bir dize var ve Python değişmez olarak uygun bir forma dönüştürmek istiyorsanız
s = r'\n' 
print(s) 
# -> \n 

:

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

korku, çok faydalı ve kodlamak için iyi bir örnek/kod çözme – OregonTrail

5

Düzenleme: Son sözünüze dayanarak, büyük olasılıkla Unicode'dan kodlanmış bazı gösterimlere geçmek istersiniz.

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

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

Bir alt süreç olarak kullanabilirsin:

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

Eğer ihtiyacınız yoksa

sonra mesela sistem kodlamasını kullanan kaçmış edilecek: Bu bir yoludur
+2

()', bu tam olarak ne amaçlanmaktadır edilemez _might_, gerçekten çekici olan bu irade olarak aslında çıkış sen ' "' gibi bir şey ile bitireceğiz böylece \\ n \\ r, tek tırnak içeren bir dize '"'. – voithos

+0

Benim Python " '\\ n \\ t'" olarak ben sadece ilk ve son karakterlerini şerit olabilir sanırım değerlendirir ...? –

+2

@MikeyCee: Lütfen daha iyi bir seçenek için düzenleme konusuna bakın. – bernie