2013-07-03 4 views
5

पर डबल बैकवर्ड स्लैश जोड़ते हैं, मैं एक यूनिक्स फ़ाइल पथ को परिवर्तित करना चाहता हूं, जो कि विंडोज़ फ़ाइल पथ पर एक फिक्स-फॉरवर्ड प्रारूप में है, जो कि है पिछड़े-स्लैश प्रारूप में। मैंने os.path.join() और os.path.normpath() दोनों की कोशिश की लेकिन दोनों ही परिणाम के लिए डबल बैकवर्ड स्लैश जोड़ना प्रतीत होता है। उदाहरण के लिए, यदि मैं os.path.normpath('static/css/reset.css') का उपयोग करता हूं, तो परिणाम static\css\reset.css के बजाय 'static\\css\\reset.css' है। और 'static/css/reset.css'.replace('/','\\') मुझे os.path.normpath के समान परिणाम देता है। क्या केवल एक-पिछड़ा-स्लैश-सीमांकित स्ट्रिंग प्रारूप प्राप्त करने का कोई तरीका है?os.path.join() और os.path.normpath() दोनों विंडोज़

वैसे, मैं Python2.7 उपयोग कर रहा हूँ 64-बिट पर विंडोज 7

+0

मुझे यकीन है कि आप 'स्थिर' /css/reset.css'.replace ('/', '\') 'लेकिन यह आदर्श समाधान नहीं है, मुझे लगता है; आप 'os.path' मार्ग लेना चाहते हैं। मुझे जवाब नहीं पता, मुझे यकीन है कि कोई और करेगा। – 2rs2ts

+1

आप अकेले आगे की स्लैश क्यों नहीं छोड़ सकते हैं क्योंकि वे विंडोज़ पर ठीक काम करते हैं? –

+0

उस पर +1 - बैकस्लाश इस कारण से एक बड़ा दर्द है, और आगे बढ़ने के लिए काम ठीक है। नेट – theodox

उत्तर

8

'static\\css\\reset.css' स्ट्रिंग r'static\css\reset.css' का प्रतिनिधित्व है।

डबल बैकसालश बैकस्लैश के से बचने का संकेत देता है - स्ट्रिंग अक्षर में इसका अर्थ है "अगले चरित्र के साथ कुछ खास करें", जिसका आप यहां नहीं चाहते हैं।

>>> print('static\\css\\reset.css') 
static\css\reset.css 
+1

समस्या यह है कि, यदि मैं अपनी मशीन पर फ़ाइल खोजने के लिए 'स्थिर \\ css \\ reset.css''' का उपयोग करता हूं, तो यह हमेशा मुझे दिखाता है 'सिस्टम निर्दिष्ट पथ नहीं ढूंढ सकता है।' बहुत निराश :( – chaonextdoor

+0

@chaonextdoor: क्या आगे के संस्करण के साथ संस्करण काम करता है? ऐसा लगता है कि यदि यह लुकअप विफल हो रहा है तो आपके मुद्दे कहीं और झूठ बोल सकते हैं। – Marius

1

static\\css\\reset.css दिखाया जा रहा है क्योंकि "\\" "\" का प्रतिनिधित्व करता है। यदि आप इस फ़ाइलपैथ का उपयोग करते हैं तो इसे 'स्थिर \ css \ reset.css' के रूप में व्याख्या किया जाएगा।

इंटरैक्टिव खोल

>>> list('static\\css\\reset.css') 

में एक चेक के रूप में देता है:

['s', 't', 'a', 't', 'i', 'c', '\\', 'c', 's', 's', '\\', 'r', 'e', 's', 'e', 't', '.', 'c', 's', 's'] 

"\\" एक ही चरित्र के रूप में दिखाया जाएगा।

3

मैं एलज़र के सही उत्तर और आपकी टिप्पणी पर विस्तार करने जा रहा हूं। जो आपको उलझन में डाल सकता है और पिछले उत्तरों में असीमित छोड़ दिया गया है, वह है कि पाइथन स्ट्रिंग के बीच एक अंतर है, क्योंकि आप इसे स्रोत कोड में प्रदान करते हैं, और जैसे कि पाइथन कंसोल और आईडीई आपको दिखाते हैं, डेवलपर , और जिस तरह स्ट्रिंग छपा है, यानी करने के लिए उपयोगकर्ता दिखाया गया है: "। सिस्टम पथ निर्दिष्ट नहीं मिल सकता है"

>>> s = 'c:\\directory\\file.txt' 
>>> s 
'c:\\directory\\file.txt' <-- if you ask for the value, you will see double slashes 
>>> print s 
c:\directory\file.txt  <-- if you print the string, the user will see single slashes 

मुझे लगता है कि कारण आपको प्राप्त हो रहे ऐसा इसलिए है क्योंकि आप मैन्युअल रूप से क्लिपबोर्ड पर प्रतिलिपि बनाते हैं और पाइथन कंसोल/आईडीई से कुछ पेस्ट करते हैं (इस तथ्य से भी समर्थित है कि आपका पथ आपके प्रश्न में उद्धरणों में दिखाया गया है)।

भ्रम में जोड़ने के लिए, आप कभी-कभी एकल उद्धरणों से दूर हो जाएंगे। केवल कुछ स्लैश-कैरेक्टर संयोजनों का एक विशेष अर्थ होता है (Python documentation देखें), उदा। '\n' एक नई लाइन के लिए और अन्य नहीं, उदाहरण के लिए '\s', जो सिर्फ \s के रूप में प्रिंट करता है।

एक साइड नोट के रूप में, से बच निकलने का कारण यह है कि वे प्रोग्रामर से संवाद करने के लिए सामान्य रूप से पाइथन/कंप्यूटर के लिए एक सुविधाजनक तरीका हैं पाठ में कौन से विशेष पात्र हैं। इस तरह, उदाहरण के लिए, '\t' (टैब कैरेक्टर) और ' ' (कई रिक्त स्थान) के बीच कोई अस्पष्टता नहीं है, असुरक्षित/कुछ नियंत्रण वर्ण वास्तव में देखे जा सकते हैं, आदि

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