2012-05-08 21 views
13

में कनवर्ट करना चाहते हैं, मैं एक स्ट्रिंग अक्षर जैसे r"r'\nasdf'" को स्ट्रिंग में बदलना चाहता हूं ('\\nasdf' इस मामले में)।पायथन स्ट्रिंग अक्षर को स्ट्रिंग्स

एक और मामला: r"'\nasdf'" से '\nasdf'। मुझे आशा है कि आपको यह मिल जाएगा।

यह महत्वपूर्ण है, क्योंकि मेरे पास पाइथन स्क्रिप्ट का पार्सर है, जो एक स्ट्रिंग अक्षर की सटीक सामग्री जानना चाहता है।

eval एक चालाक समाधान है? स्ट्रिंग अक्षर पहले फ़िल्टर किए जाते हैं (tokenize के साथ) और सुरक्षा देनदारियों का कारण नहीं बनना चाहिए। क्या कोई शाब्दिक मूल्यांकन करने के बजाय nobler समाधान नहीं हैं? एक पार्सर लाइब्रेरी शायद?

संपादित करें: गलतफहमी से बचने के लिए अन्य उदाहरण जोड़े गए।

+0

जो 'कच्चा' स्ट्रिंग होगा, न कि 'शाब्दिक' –

+0

मुझे लगता है कि मैंने अपना प्रश्न सही नहीं बनाया है, मैं इसे फिर से करने की कोशिश कर रहा हूं। मेरा मतलब था स्ट्रिंग अक्षर, कच्चे तार नहीं। –

+0

पर्याप्त स्पष्ट है। और literal_eval महान समाधान है :) –

उत्तर

16

आप ast module हैं:

>>> import ast 
>>> raw = r"r'\nasdf'" 
>>> ast.literal_eval(raw) 
'\\nasdf' 
>>> raw = r"'\nasdf'" 
>>> ast.literal_eval(raw) 
'\nasdf' 

इस का मूल्यांकन/पार्स करने तार कि अजगर स्रोत कोड होते हैं (eval() के विपरीत) के लिए एक सुरक्षित तरीका है।

8

हाँ, वहाँ रहे हैं:

>>> s = r'\nasdf' 
>>> s.decode('string-escape') 
'\nasdf' 
+0

क्षमा करें, मेरा प्रश्न बहुत स्पष्ट नहीं था (मैंने संपादित किया)। स्ट्रिंग रूपांतरण के लिए यह एक कच्ची स्ट्रिंग है, स्ट्रिंग रूपांतरण के लिए एक स्ट्रिंग अक्षर नहीं है। –

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