2016-03-23 28 views
0

almak için dize kaçış kullanarak kodlamak:piton: Ben dize kodlamak istediğiniz doğru tırnak

x="print 'Hello.\nI\'m a robot from district 09'" 
x=x.encode('string-escape') 
print x 

# Result: print \'Hello.\nI\'m a robot from district 09\' 

Ama bu ben bekliyorum sonuç değil. Ben bir şey istiyorum:

# Result: print 'Hello.\nI\'m a robot from district 09' 

Bu sonuç nasıl elde edilir? bu yüzden 'exec x' kullanarak yürütmek zaman ben bu alacak:

exec x 
# Result: 
Hello. 
I'm a robot from district 09 

cevap

0

kullanın repr

x="print 'Hello.\nI\'m a robot from district 09'" 
print repr(x) 

# Result: 'Hello.\nI\'m a robot from district 09' 

DÜZENLEME: açıklamada belirtildiği gibi bu yöntem 'I' dışarı özlüyor m Ham stringin basılması basitçe 'r' kullanılarak elde edilebilir. Aşağıdaki örneğe bakınız. Bu kez sonucu kendim doğruladım.

x= r"print 'Hello, \nI\'m a robot from district 09'" 
print x 

#result: print 'Hello, \nI\'m a robot from district 09' 

Edit2: Sen "ham" Varolan dizesi dönemez. Hazırlıklar üzerinde r öneki ayrıştırıcı tarafından anlaşılmaktadır; dizede kaçış dizilerini yok saymasını söyler. Bununla birlikte, bir dize değişmezi ayrıştırıldıktan sonra, bir ham dize ile "düzenli" olan arasında hiçbir fark yoktur. Örneğin, yeni satır içeren bir dizeniz varsa, çalışma zamanında bu yeni satırın \ n kaçış dizisinden veya "\ next" gibi bir dizeden gelip gelmediğini söylemenin bir yolu yoktur. Bu yöntemlerden oluşturulan gerçek dize nesnesi aynı görünüyor.

Dize kodlaması/dizesi kaçışı ve geri yükleme kullanma girişimleri, beklediğiniz kullanım için başarısız olur.

Bu yardımcı olur umarım.

+0

Teşekkürler ama yine de yanlış sonuç: "print 'Merhaba. \ NBir bölge 09'dan bir robotum" ". "\" "-i'm" eksik. – andio

+0

@andio Lütfen düzenlemeye bakın. Hataya dikkat ettiğiniz için teşekkürler! –

+0

Merhaba, evet bunu da denedim. 'r' sadece x'i kendim atayabilirsem çalışıyor. Ancak x, başka bir kullanıcı tarafından girilen değişkendir (metin giriş arayüzünü kullanarak). Bu değişkene 'r' yerleştirmek nasıl mümkün olabilir? Yani hedef: kullanıcı komutu metin girişine girin. Sonra çalıştırmak için 'exec' komutunu kullanabileceğimden daha fazla düğme sağladım. – andio