2011-07-11 15 views
5

मैं पाइथन के लिए नया हूं इसलिए मैं इस बारे में पूरी तरह से गलत हो रहा हूं, लेकिन मुझे फ़ाइल की निर्देशिका में समस्याएं बदलने और बदलने में समस्याएं आ रही हैं। मेरी स्क्रिप्ट कई फ़ाइल नामों में लेती है जो किसी भी निर्देशिका में हो सकती हैं। मेरी स्क्रिप्ट में मुझे फ़ाइल की निर्देशिका में बदलने के लिए पायथन की आवश्यकता है और फिर कुछ क्रियाएं करें। हालांकि, मुझे निर्देशिका बदलने में समस्याएं आ रही हैं।स्वरूपण फ़ाइल पथ

यहाँ मैं अब तक की कोशिश की है है:

path=os.path.split(<file path>) 
os.chdir(path[0]) 
<Do things to file specified by path[1]> 

तरह से मैं फ़ाइल पथ हो रही किया गया है अन्वेषक से कमांड लाइन में खींचकर है। यह पथ नाम को "C:\foo\bar\file_name.txt" जैसा कुछ दर्ज करता है। जब मैं दुभाषिया में पहली पंक्ति चलाता हूं तो मुझे ('C:\\foo\bar','file_name.txt') मिलता है। समस्या यह है कि किसी कारण से अंतिम बैकस्लैश स्वचालित रूप से बच नहीं जाता है, इसलिए जब मैं os.chdir(path[0]) लाइन चलाता हूं तो मुझे त्रुटियां मिलती हैं।

मेरा सवाल यह है कि अंतिम बैकस्लैश स्वचालित रूप से दूसरों की तरह क्यों नहीं निकल रहा है? मैं आखिरी बैकस्लैश से मैन्युअल रूप से कैसे बच सकता हूं? क्या फाइल की निर्देशिका पाने और इसमें बदलने का कोई बेहतर तरीका है?

+0

कमांड प्रॉम्प्ट पर चीजों को चलाने के लिए पाइथन से बाहर खोलने के लिए यह थोड़ा असामान्य (हालांकि हमेशा गलत नहीं) है। "कुछ क्रियाएं" क्या हैं? शायद वे सीधे पाइथन में ही किया जा सकता है। – Gerrat

+0

मुझे नहीं लगता कि रोहोल्कोकेके पायथन शेल से बाहर निकल रहा है; जैसा कि मैंने हाल ही में देखा है, आप खोल के दौरान पथ प्राप्त करने के लिए अभी भी कंसोल विंडो में फ़ाइलों को खींच सकते हैं। बेशक अगर आपको खोल के बाहर कुछ करना पड़ता है, अगर यह केवल एक ही क्रिया है, तो आप केवल 'os.system() 'का उपयोग कर सकते हैं। और यहां तक ​​कि यदि यह कई क्रियाएं हैं, यदि यह अक्सर दोहराया जाता है, तो आप बैच फ़ाइल भी लिख सकते हैं और 'os.system() 'का उपयोग कर कॉल कर सकते हैं। निश्चित रूप से इसमें से कोई भी राहोल्कोकेल्के के बारे में पूछने के साथ नहीं करना है। – JAB

उत्तर

5

अंतिम बैकस्लैश स्वचालित रूप से बच नहीं रहा है क्योंकि पाइथन केवल नियमित तारों में बैकस्लाश से बच निकलता है जब निम्न वर्ण बैकस्लैश के साथ बचने के अनुक्रम का निर्माण नहीं करता है। असल में, आपके उदाहरण में, आपको 'C:\foo\bar' से नहीं मिलेगा, आपको 'C:\x0coo\x08ar' मिलेगा।

आप क्या करना चाहते क्या या तो forwardslashes साथ बैकस्लैश की जगह है, या यह खींचें और ड्रॉप के संचालन के लिए सरल बनाने के लिए, बस यह है कि यह एक कच्चे स्ट्रिंग है और भागने दृश्यों को नहीं पहचानता है तो r साथ पथ पहले जोड़ें है ।

>>> os.path.split(r"C:\foo\bar\file_name.txt") 
('C:\\foo\\bar','file_name.txt') 
+0

धन्यवाद। अभी सही काम करता है। – rhololkeolke

+0

आपका स्वागत है। – JAB

2

आप सही मॉड्यूल और विधियों का उपयोग कर रहे हैं।

path=os.path.split(r'C:\foo\bar\file_name.txt') 

नोट पहले बोली के सामने r, करता है कि अजगर बैकस्लैश इलाज नहीं: बस जब तुम वहाँ में है कि विंडोज़ पथ डाल रहे हैं, स्ट्रिंग एक कच्चे स्ट्रिंग, ताकि अपने आदेश की तरह दिखना चाहिए स्ट्रिंग में भागने के क्रम के रूप में।

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