python पाइथन डबल बैकस्लैश के साथ सिंगल बैकस्लैश को प्रतिस्थापित करता है




string replace (7)

पायथन में, मैं एक बैकस्लैश ("\") को एक डबल बैकस्लैश ("\") के साथ बदलने की कोशिश कर रहा हूं। मेरे पास निम्न कोड है:

directory = string.replace("C:\Users\Josh\Desktop\20130216", "\", "\\")

हालांकि, यह एक त्रुटि संदेश देता है कि यह डबल बैकस्लैश पसंद नहीं करता है। क्या कोई मदद कर सकता है?


उपयोग:

string.replace(r"C:\Users\Josh\Desktop\20130216", "\\", "\\")

\ चरित्र से बचें।


बचने के पात्रों का प्रयोग करें: "full\\path\\here" , "\\" और "\\\\"


स्रोत स्ट्रिंग को देखते हुए, os.path साथ हेरफेर अधिक समझ में os.path सकता है, लेकिन यहां एक स्ट्रिंग समाधान है;

>>> s=r"C:\Users\Josh\Desktop\\20130216"
>>> '\\\\'.join(filter(bool, s.split('\\')))
'C:\\\\Users\\\\Josh\\\\Desktop\\\\20130216'

ध्यान दें कि split स्रोत स्ट्रिंग में \\ सीमित खाली स्ट्रिंग के रूप में व्यवहार करता है। filter का उपयोग उन खाली तारों से छुटकारा पाता है, इसलिए पहले से ही दोगुनी बैकस्लैश को दोगुना नहीं किया जाएगा। दुर्भाग्यवश, यदि आपके पास 3 या अधिक हैं, तो वे दोगुनी बैकस्लाश तक कम हो जाते हैं, लेकिन मुझे नहीं लगता कि आपको विंडोज़ पथ अभिव्यक्ति में दर्द होता है।


str.replace या str.replace का उपयोग करने की कोई आवश्यकता नहीं है, बस उस स्ट्रिंग को कच्ची स्ट्रिंग में कनवर्ट करें:

>>> strs = r"C:\Users\Josh\Desktop\20130216"
           ^
           |
       notice the 'r'

नीचे उपरोक्त स्ट्रिंग का repr संस्करण है, यही कारण है कि आप यहां \\ देख रहे हैं। लेकिन, वास्तव में वास्तविक स्ट्रिंग में केवल '\' नहीं \\

>>> strs
'C:\\Users\\Josh\\Desktop\\20130216'

>>> s = r"f\o"
>>> s            #repr representation
'f\\o'
>>> len(s)   #length is 3, as there's only one `'\'`
3

लेकिन जब आप इस स्ट्रिंग को प्रिंट करने जा रहे हैं तो आपको आउटपुट में '\\' नहीं मिलेगा।

>>> print strs
C:\Users\Josh\Desktop\20130216

यदि आप print दौरान स्ट्रिंग को '\\' दिखाना चाहते हैं तो str.replace उपयोग str.replace :

>>> new_strs = strs.replace('\\','\\\\')
>>> print new_strs
C:\\Users\\Josh\\Desktop\\20130216

repr संस्करण अब दिखाएगा \\\\ :

>>> new_strs
'C:\\\\Users\\\\Josh\\\\Desktop\\\\20130216'

बैकस्लैश एक विशेष भागने चरित्र इंगित करता है। इसलिए, directory = path_to_directory.replace("\", "\\") पाइथन को यह सोचने का कारण बनती है कि प्रतिस्थापित करने वाला पहला तर्क दूसरे तर्क के प्रारंभिक उद्धरण तक समाप्त नहीं हुआ क्योंकि यह अंततः उद्धरण को एक बचने वाले चरित्र के रूप में समझता है ।

directory=path_to_directory.replace("\\","\\\\")

पायथन \ (बैकस्लैश) में एक बचने वाले चरित्र के रूप में प्रयोग किया जाता है। इसका अर्थ यह है कि उन स्थानों पर जहां आप एक विशेष चरित्र (जैसे न्यूलाइन) डालना चाहते हैं, आप बैकस्लैश और अन्य वर्ण ( \n न्यूलाइन के लिए) का उपयोग करेंगे।

आपके उदाहरण स्टिंग के साथ आप देखेंगे कि जब आप "C:\Users\Josh\Desktop\20130216" में "C:\Users\Josh\Desktop\20130216" तो आपको "C:\\Users\\Josh\\Desktop\x8130216" । ऐसा इसलिए है क्योंकि एक पाइथन स्टिंग में \2 का विशेष अर्थ है। यदि आप निर्दिष्ट करना चाहते हैं तो आपको अपनी स्ट्रिंग में दो \\ डालना होगा।

"C:\\Users\\Josh\\Desktop\\28130216"

दूसरा विकल्प पाइथन को सूचित करना है कि आपके पूरे स्टिंग को r साथ पूर्व-लंबित लंबित वर्ण से बचने के लिए \

r"C:\Users\Josh\Desktop\20130216"

यह एक "कच्ची" स्ट्रिंग है, और परिस्थितियों में बहुत उपयोगी है जहां आपको नियमित अभिव्यक्तियों के साथ कई बैकस्लाश का उपयोग करने की आवश्यकता होती है।

यदि आप अभी भी उस सिंगल को \\ साथ प्रतिस्थापित करना चाहते हैं तो आप इसका उपयोग करेंगे:

directory = string.replace(r"C:\Users\Josh\Desktop\20130216", "\\", "\\\\")

ध्यान दें कि मैं पिछले दो स्टिंग्स में r' का उपयोग नहीं कर रहा हूं। ऐसा इसलिए है क्योंकि, जब आप r' फॉर्म का उपयोग करते हैं तो आप उस स्ट्रिंग को एक सिंगल के साथ समाप्त नहीं कर सकते \

पाइथन के कच्चे स्ट्रिंग अक्षर क्यों एक बैकस्लैश के साथ समाप्त नहीं हो सकते हैं?

https://pythonconquerstheuniverse.wordpress.com/2008/06/04/gotcha-%E2%80%94-backslashes-are-escape-characters/


मुझे इसे सरल और स्पष्ट बनाने दें। विशेष वर्णों से बचने के लिए पाइथन में पुनः मॉड्यूल का उपयोग करें।

पायथन लिपि:

import re
s = "C:\Users\Josh\Desktop"
print s
print re.escape(s)

आउटपुट:

C:\Users\Josh\Desktop
C:\\Users\\Josh\\Desktop

स्पष्टीकरण:

अब देखते हैं कि दिए गए स्ट्रिंग में विशेष वर्णों से बचने के लिए re.escape फ़ंक्शन हम प्रत्येक बैकस्लैश से पहले एक अन्य बैकस्लैश जोड़ने में सक्षम होते हैं, और आखिरकार आउटपुट परिणाम डबल बैकस्लैश, वांछित आउटपुट में होते हैं।

उम्मीद है कि यह आपकी मदद करता है।





backslash