2012-09-11 22 views
8

आयरन पायथन में chdir कमांड करते समय मुझे "पथ में अवैध वर्ण" त्रुटि मिल रही है। यह मेरे कोड के साथ रन टाइम में हो रहा है, लेकिन यहां तक ​​कि आयरन पायथन कंसोल में भी यह समस्या है। मैं एनटी मॉड्यूल का उपयोग कर रहा हूं क्योंकि कोड में ओएस मॉड्यूल काम नहीं करता है (एक ज्ञात मुद्दा प्रतीत होता है)।पायथन शब्द का उपयोग करते समय पाइथन (आयरनपीथन) रिपोर्ट "पथ में अवैध पात्र" क्यों है?

इसके आसपास खेलने का थोड़ा सा हिस्सा "अवैध पात्र" वास्तव में शब्द बिन है। नीचे कंसोल से टेक्स्ट है जो मुझे केवल त्रुटि प्राप्त करता है जब मैं बिन निर्देशिका में नेविगेट करता हूं।

यहाँ उदाहरण है

>>> nt.chdir('c:\Users\xxxxx\Documents\Visual Studio 2010\Projects\xxx') 
>>> nt.chdir('c:\Users\xxxxx\Documents\Visual Studio 2010\Projects\xxx\Directory') 
>>> nt.chdir('c:\Users\xxxxx\Documents\Visual Studio 2010\Projects\xxx\Directory\bin') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: Illegal characters in path. 

क्या बदतर मैं एक पूरी तरह से अलग निर्देशिका के भीतर पहुंच जाएंगे (है कि एक बिन निर्देशिका नहीं है) और उप-निर्देशिका "बिन" नेविगेट करने के लिए कोशिश करते हैं और मैं है अभी भी वह त्रुटि मिल जाएगी!

कोई विचार?

उत्तर

14

\ पथ विभाजक भी एक अजगर से बचने वाला चरित्र है। उन्हें डबल, या बेहतर अभी तक, r'' कच्चे अजगर शाब्दिक बजाय का उपयोग करें:

r'c:\Users\xxxxx\Documents\Visual Studio 2010\Projects\xxx' 
'c:\\Users\\xxxxx\\Documents\\Visual Studio 2010\\Projects\\xxx' 

उदाहरण के लिए, \n एक नई पंक्ति चरित्र है, और \t टैब के रूप में व्याख्या की है। आपके विशिष्ट मामले में, \b को बैकस्पेस के रूप में व्याख्या किया जाता है।

+0

DOH। मुझे पता था कि ... मुझे लगता है कि ऐसा ही होता है कि बी के अलावा उन सभी विशेष पात्रों से बच निकलना ठीक था ..... धन्यवाद! "सभ्य" के लिए – Mike

5

\ पायथन स्ट्रिंग्स में एक बचने वाला चरित्र है। \b बैकस्पेस है, यही कारण है कि यह \bin पर बारफ़्स है: आप Directory\bin निर्देशिका निर्दिष्ट नहीं कर रहे हैं, आप निर्देशिका Directory<backspace>in निर्दिष्ट कर रहे हैं, जो एक कानूनी पथ नहीं है और यहां तक ​​कि यदि यह भी मौजूद है, मौजूद नहीं है।

आप मार्टिजन द्वारा सुझाए गए अनुसार r संकेतक का उपयोग करके बैकस्लाश को दोगुना करके या स्ट्रिंग लिख सकते हैं। एक तीसरा विकल्प है कि हर दूसरे सभ्य ऑपरेटिंग सिस्टम में आगे की स्लैश का उपयोग करें। इनका उपयोग करने के लिए विंडोज पूरी तरह से खुश है।

+0

+1। – lvc

+0

मुझे विंडोज़ (जो मैं खुशी से अधिकतर समय से बच सकता हूं) को पढ़ाने के लिए +1 आजकल सामान्य ओएस की तरह '/' पथ विभाजक स्वीकार करता है। –

+0

मैं कभी विंडोज़ पथिंग का उपयोग नहीं करता हूं। मैं वास्तव में पथों को स्वयं नहीं बना रहा हूं लेकिन "प्लेटफार्म specfic पथ" बनाने के लिए .Net पथ वर्ग का उपयोग कर रहा हूं। तो जाहिर है कि यह लिनक्स (मेरी पसंदीदा) की तुलना में विंडोज पर अलग-अलग कार्य करेगा। जाहिर है आपको इस तरह के मुद्दे मिलते हैं जहां मुझे अब बच्चे को इसके माध्यम से कदम उठाना पड़ता है, जैसा कि आप स्पष्ट रूप से इंगित करते हैं, विंडोज सिर्फ ड्रैगिंग नहीं कर रहा है, बल्कि सामान्य रूप से केवल एक भयानक ओएस है। – Mike

1

विंडोज और अधिकांश अन्य ऑपरेटिंग सिस्टम आगे की कमी को पहचानेंगे। तो, बैकस्लैश के बजाय, डबल-बैकस्लैश, या आर '(स्ट्रिंग अक्षर here पर अधिक) आप केवल आगे स्लैश का उपयोग कर सकते हैं और आप जाने के लिए अच्छे हैं। उत्तर here भी अच्छी तरह से विस्तृत है।

अद्यतन: पीएस: सावधानी के साथ बैकस्लाश और स्ट्रिंग अक्षर का उपयोग करें। हमेशा अपने विशिष्ट मामले की जांच करें। इस पर एक अच्छी टिप्पणी है कि answer

+0

यह वास्तव में सभी परिस्थितियों में विंडोज़ पर सच नहीं है। कई अनुप्रयोग हैं, विंडोज़ के भीतर कार्य जिन्हें पथ के लिए \ की आवश्यकता होती है। बस एक कमांड प्रॉम्प्ट खोलें, "copy ./directory/file.txt ./locationdir" टाइप करें और आप देखेंगे कि मेरा क्या मतलब है। – Mike

+0

@ माइक: आप निश्चित रूप से सही हैं। मैं निश्चित रूप से सहमत हूं कि यह विंडोज़ में भी 100% काम नहीं करता है। जब ओएस की बात आती है तो पागल कैसे कभी भी पूरी तरह से सार्वभौमिक नहीं होता है। सामान। मैंने अपने उत्तर में दिए गए उत्तर से भी पढ़ा है: "इसलिए कच्चे तार 100% कच्चे नहीं हैं, फिर भी कुछ प्राथमिक बैकस्लैश-प्रोसेसिंग है।" – Alain

+0

उपरोक्त उत्तर "हर दूसरे सभ्य ऑपरेटिंग सिस्टम" के साथ। मुझे लगता है कि लागू होता है। विंडोज़ में एक बकवास डिजाइन है जो उपयोगकर्ताओं, व्यापारिक लोगों और न ही डेवलपर्स के लिए अच्छा है। मैं लिनक्स पर जितना अधिक विकास करने की कोशिश करता हूं क्योंकि मैं इस तरह की चीजों से बच सकता हूं। मुझे उन स्थानों का एक तालमेल रखने की जरूरत है जहां खिड़कियों में स्वीकार नहीं किया गया है, क्योंकि एक और लड़का और मैं बार-बार इस बार आते हैं। – Mike