पायथन के os.makedirs मेरे रास्ते में "~" नहीं समझते हैं


159

मुझे अपने रास्तों में ~ से थोड़ी समस्या है।

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

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

ध्यान दें कि यह लिनक्स-आधारित प्रणाली पर है।

जवाबों:


277

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

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

1
इसलिए मैंने os.path.expanduser का उपयोग नहीं किया, और ओपी ने जो किया, और मेरी वर्तमान निर्देशिका में "~" निर्देशिका बनाई। मैं उस निर्देशिका को कैसे हटा सकता हूं (वास्तविक होम निर्देशिका को हटाए बिना)?
हैप्पी मित्तल

1
दूसरों की सोच के लिए @HappyMittal, आप बस ./अपनी वर्तमान निर्देशिका को संदर्भित करने के लिए उपयोग कर सकते हैं , और इस प्रकार वर्तमान निर्देशिका में ./~फ़ोल्डर को हटा सकते हैं ~। सुरक्षित होने के लिए, केवल पूर्ण पथ प्रदान करना सबसे आसान है rm -rf path/to/bad/dir/~:।
अल्कमास

या बस एक बैकस्लैश के साथ बच जाएं:rm \~
DDMC

71

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

पायथन में, यह सुविधा os.path.expanduser द्वारा कार्यान्वित की गई है :

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

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

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

The file system does not know anything about it.+1
बिन

15

शायद यही कारण है कि पायथन बैश नहीं है और उसी सम्मेलनों का पालन नहीं करता है। आप इसका उपयोग कर सकते हैं:

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

0
from srblib import verify_folder

verify_folder('path/to/folder')

यह एक फोल्डर बनाएगा यदि नहीं तो फोल्डर बनाएं।

नोट : यह पथ में फ़ोल्डर भी बनाएगा (यदि आवश्यक हो)

srb@srb-pc:~/hello$ ls
srb@srb-pc:~/hello$ python3 
>>> from srblib import verify_folder
>>> verify_folder('~/hello/A/B')
>>> exit()
srb@srb-pc:~/hello$ ls
A
srb@srb-pc:~/hello$ ls A
B
srb@srb-pc:~/hello$ 

यह फ़ंक्शन काम करता है mkdir -p path/to/folder


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.