2012-02-18 10 views
6

का उपयोग करने में पात्रों भाग निकले मैं अजगर 3.2 में एक स्ट्रिंग इस तरह है कहो। मैं जो चाहता हूं उसे सचमुच एक बैकस्लैश के रूप में प्रिंट करने में सक्षम होना चाहिए जिसके बाद एन। इसके अलावा, मुझे यह सभी बचने वाले पात्रों के लिए ऐसा करने की ज़रूरत है, जैसे \ t।न छोड़ने एक स्ट्रिंग अजगर 3.2

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

उनके शाब्दिक प्रतिस्थापन भाग वर्णों का एक शब्दकोश के निर्माण के बिना पायथन में यह संभव है: तो मैं एक समारोह अनएस्केप() है कि, सामान्य मामले के लिए, इस प्रकार काम करेगा के लिए देख रहा हूँ?

(में मामला किसी को दिलचस्पी है, कारण मैं यह कर रहा हूं क्योंकि मैं कमांड लाइन पर एक बाहरी कार्यक्रम के लिए स्ट्रिंग पारित करने के लिए की जरूरत है इस कार्यक्रम के सभी मानक भागने दृश्यों को समझता है।।)

+0

जब आप कहते हैं कि "एक कमांड लाइन" मैं मान लीजिए कि आप वास्तव में stdout के माध्यम से मतलब है, इस मामले में जिस प्रोग्राम को आप डेटा पास कर रहे हैं उसे किसी भी समस्या के बिना '\ n', आदि का उपभोग करना चाहिए। यही है, यदि आपने इस दूसरे प्रोग्राम में पारित होने के बाद डेटा मुद्रित किया है, तो आप देखेंगे कि \ n' अभी भी वहां होगा। जब तक आप वास्तव में इसे बचाना नहीं चाहते हैं। लेकिन पहले जांचें, अगर आप दूसरे प्रोग्राम में अतिरिक्त '\' को हटा रहे हैं, तो आप शायद इसे गलत कर रहे हैं। – Endophage

+0

मेरे पास कम्यूट लाइन नामक कमांड लाइन प्रोग्राम है। यह इस तरह कहा जाने की उम्मीद है: 'myutility -i \ n' यदि मैं स्ट्रिंग को अनदेखा नहीं करता हूं तो यह कभी भी \ n इसे पारित नहीं करेगा - यह मान लेगा - मैं खाली होना चाहता हूं तर्क। –

उत्तर

11

एक शाब्दिक स्ट्रिंग में \ के विशेष उपचार को रोकने के लिए आप r उपसर्ग का उपयोग कर सकते हैं:

s = r'\n' 
print(s) 
# -> \n 

आप एक स्ट्रिंग है एक नई पंक्ति प्रतीक (ord(s) == 10) शामिल है और आप इसे एक अजगर शाब्दिक रूप में उपयुक्त रूप में बदलने के लिए करना चाहते हैं:

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

भयानक, बहुत उपयोगी और एन्कोड/डीकोड का एक अच्छा उदाहरण – OregonTrail

5

संपादित करें: आपकी आखिरी टिप्पणी के आधार पर, आप शायद यूनिकोड से कुछ एन्कोडेड प्रतिनिधित्व में प्राप्त करना चाहते हैं।

>>> 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() 

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

आप उन्हें जरूरत नहीं है, तो अपने सिस्टम एन्कोडिंग, जैसे का उपयोग भाग निकले जा करने के लिए: यह एक तरीका है

+2

हालांकि 'repr()' वास्तव में आकर्षक है, यह _might_ बिल्कुल वही नहीं है जो वास्तव में है, क्योंकि यह वास्तव में सिंगल कोट्स वाली एक स्ट्रिंग आउटपुट करेगा, इसलिए आप कुछ '' '\\ n \\ r ' "'। – voithos

+0

मेरा पायथन मूल्यांकन करता है कि "'\\ n \\ t'" मुझे लगता है कि मैं केवल पहले और आखिरी वर्णों को पट्टी कर सकता हूं ...? –

+2

@ माइकीसी: कृपया बेहतर विकल्प के लिए संपादन देखें। – bernie

संबंधित मुद्दे