2010-01-13 13 views
80

मुझे अपने पथों में ~ थोड़ी सी समस्या है।पायथन - os.makedirs समझ में नहीं आता ~ मेरे रास्ते में?

यह कोड उदाहरण "~/some_dir", नामक कुछ डीआईआर बनाता है और यह समझ में नहीं आता कि मैं अपने घर डीआईआर में कुछ_डीआईआर बनाना चाहता हूं।

my_dir = "~/some_dir" 
if not os.path.exists(my_dir): 
    os.makedirs(my_dir) 

नोट यह लिनक्स आधारित सिस्टम पर है।

उत्तर

148

आप मैन्युअल रूप से टिल्ड का विस्तार करने की जरूरत है:

my_dir = os.path.expanduser('~/some_dir') 
12

शायद है ऐसा इसलिए है क्योंकि अजगर बैश नहीं है और एक ही परंपराओं का पालन नहीं करता है। आप इस का उपयोग कर सकते हैं:

homedir = os.path.expanduser('~') 
52

$HOME/some_dir को ~/some_dir के रूपांतरण tilde expansion कहा जाता है और एक आम यूजर इंटरफेस की सुविधा है। फ़ाइल सिस्टम इसके बारे में कुछ भी नहीं जानता है।

अजगर, इस सुविधा os.path.expanduser द्वारा कार्यान्वित किया जाता:

my_dir = os.path.expanduser("~/some_dir") 
+0

दरअसल, और यह एक फ़ाइल या निर्देशिका नामित '~' के लिए पूरी तरह से वैध है। तो खोल घर शॉर्टकट संदिग्ध है और यदि आप कर सकते हैं तो सबसे अच्छा बचा है। – bobince

+4

ध्यान दें कि "./~" नोटेशन का उपयोग करते हुए, जब कोई tilde विस्तार होता है, तब भी कोई भी वर्तमान निर्देशिका में "~" नाम की फ़ाइल/डीआईआर तक पहुंच सकता है। यह काम करता है क्योंकि ~ विस्तार केवल फ़ाइल नाम की शुरुआत में होता है। यह "-" या अन्य वर्णों से शुरू होने वाले फ़ाइल नामों के लिए एक सुविधाजनक हैक भी है जो विशेष रूप से कमांड लाइन इंटरफेस द्वारा इलाज किया जाता है। आप बता सकते हैं कि मैंने शायद बहुत अधिक शैल स्क्रिप्ट हैकिंग किया है। – ddaa

+0

'फाइल सिस्टम इसके बारे में कुछ नहीं जानता है।' +1 – Bin

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