2011-10-28 17 views
10

बदले बिना पायथन में एक नया निर्देशिका के लिए लिख रहा है ...वर्तमान में, मैं निम्नलिखित कोड है निर्देशिका

file_name = content.split('=')[1].replace('"', '') #file, gotten previously 
fileName = "/" + self.feed + "/" + self.address + "/" + file_name #add folders 
output = open(file_name, 'wb') 
output.write(url.read()) 
output.close() 

मेरा लक्ष्य अजगर "पते में एक फाइल करने के लिए फ़ाइल लिखने (file_name से कम) है "वर्तमान निर्देशिका में" फ़ीड "फ़ोल्डर में फ़ोल्डर (आईई, जहां पायथन लिपि सहेजी गई है)

मैंने ओएस मॉड्यूल में देखा है, लेकिन मैं अपनी वर्तमान निर्देशिका और इन निर्देशिकाओं को बदलना नहीं चाहता पहले से मौजूद नहीं है

उत्तर

9

पहले, मैं 100% विश्वास है मैं सवाल को समझते हैं, तो मुझे मेरी धारणा राज्य नहीं कर रहा हूँ: 1) तुम एक करने के लिए लिखना चाहते हैं ऐसी निर्देशिका में फ़ाइल करें जो अभी तक मौजूद नहीं है। 2) पथ सापेक्ष है (वर्तमान निर्देशिका में)। 3) आप वर्तमान निर्देशिका को बदलना नहीं चाहते हैं।

तो, यह दिया गया: इन दो कार्यों को देखें: os.makedirs और os.path.join। चूंकि आप एक सापेक्ष पथ निर्दिष्ट करना चाहते हैं (वर्तमान निर्देशिका के संबंध में) आप प्रारंभिक "/" जोड़ना नहीं चाहते हैं।

dir_path = os.path.join(self.feed, self.address) # will return 'feed/address' 
os.makedirs(dir_path)        # create directory [current_path]/feed/address 
output = open(os.path.join(dir_path, file_name), 'wb') 
+0

os.makdirs (dir_path, exist_ok = सच) तो अगर dir मौजूद OSError अपवाद आगे नहीं बढ़ेगी। यदि निर्देशिका मौजूद है तो ओएसईआररर को डिफॉल्ट करना डिफ़ॉल्ट है। – kaicarno

0

os.mkdir जैसे कमांड की वास्तव में आवश्यकता नहीं है कि आप अपनी वर्तमान निर्देशिका में फ़ोल्डर बनाते हैं; आप एक रिश्तेदार या पूर्ण पथ डाल सकते हैं।

os.mkdir('../new_dir') 
os.mkdir('/home/you/Desktop/stuff') 

मैं रिकर्सिवली फ़ोल्डर बनाने दोनों के लिए एक रास्ता के बारे में पता नहीं है और अपने आप इस तरह के एक समारोह लेखन के अलावा फ़ाइल को खोलने - यहाँ लगभग इन-लाइन कोड है। os.makedirs आपको वहां से सबसे अधिक रास्ता मिलेगा; एक ही रहस्यमय स्वयं वस्तु का उपयोग कर आप हमें नहीं दिखाया:

dir = "/" + self.feed + "/" + self.address + "/" 
os.makedirs(dir) 
output = open(os.path.join(dir, file_name), 'wb') 
7

यह वर्तमान स्क्रिप्ट को एक ही निर्देशिका में फाइल feed/address/file.txt पैदा करेगा:

import os 

file_name = 'file.txt' 
script_dir = os.path.dirname(os.path.abspath(__file__)) 
dest_dir = os.path.join(script_dir, 'feed', 'address') 
try: 
    os.makedirs(dest_dir) 
except OSError: 
    pass # already exists 
path = os.path.join(dest_dir, file_name) 
with open(path, 'wb') as stream: 
    stream.write('foo\n') 
संबंधित मुद्दे