2015-09-09 6 views
5

मैं हमेशा पाइथन में निर्देशिका ट्रैवर्सल के विषय पर उलझन में रहा हूं, और ऐसी स्थिति है जिसके बारे में मैं उत्सुक हूं: मेरे पास एक फ़ाइल है जिसे मैं निर्देशिका में एक्सेस करना चाहता हूं अनिवार्य रूप से एक मैं में वर्तमान में कर रहा हूँ के समानांतर देखते हुए इस निर्देशिका संरचना:।एक अन्य निर्देशिका में खोलें फ़ाइल (पायथन)

\parentDirectory 
    \subfldr1 
     -testfile.txt 
    \subfldr2 
     -fileOpener.py 

मैं fileOpener.py में स्क्रिप्ट कोशिश कर रहा हूँ subfldr2 से बाहर निकलना, subfldr1 में मिलता है, और फिर एक खुला फोन() testfile.txt पर।

ब्राउज़िंग स्टैक ओवरफ्लो से, मैंने लोगों को os और os.path का उपयोग करने के लिए देखा है, लेकिन मुझे केवल स्क्रिप्ट के मूल के नीचे उपनिर्देशिका में फ़ाइलों के संबंध में उदाहरण मिल गए हैं।

इस पर काम करते हुए, मुझे एहसास हुआ कि मैं सिर्फ स्क्रिप्ट को subfldr1 में स्थानांतरित कर सकता हूं और फिर सभी ठीक होंगे, लेकिन मेरी जिज्ञासा इस बात के बारे में बताई गई है कि यह कैसे पूरा किया जाएगा।

संपादित करें: यह प्रश्न विशेष रूप से विंडोज मशीन से संबंधित है, क्योंकि मुझे नहीं पता कि ड्राइव अक्षरों और बैकस्लाश इस में कारक कैसे होंगे।

+0

आप वर्तमान सेट करने की आवश्यकता है के साथ stuf कर सकते हैं निर्देशिका 'subfldr1' * * और * फ़ाइल को अंदर खोलें? या क्या आपको केवल फ़ाइल खोलने की आवश्यकता है, लेकिन क्या आपकी वर्तमान निर्देशिका बदल गई है इससे कोई फर्क नहीं पड़ता? –

+0

@DanLowe मुझे वास्तव में वर्तमान निर्देशिका को बदलने की आवश्यकता नहीं है, बस testfile.txt तक पहुँचें जहां से मैं subfldr2 – dbishop

उत्तर

9

यदि आप फ़ाइल के पूर्ण पथ को जानते हैं तो आप बस इसी तरह कुछ कर सकते हैं। हालांकि यदि आप सीधे सापेक्ष पथ से संबंधित प्रश्न पूछते हैं, तो मैं अपरिचित हूं और अनुसंधान और परीक्षण करना होगा।

path = 'C:\\Users\\Username\\Path\\To\\File' 

with open(path, 'w') as f: 
    f.write(data) 

संपादित करें:

यहाँ यह पूर्ण की अपेक्षाकृत बजाय करने के लिए एक तरीका है। सुनिश्चित नहीं है कि यह विंडोज़ पर काम करता है, तो आपको इसका परीक्षण करना होगा।

import os 

cur_path = os.path.dirname(__file__) 

new_path = os.path.relpath('..\\subfldr1\\testfile.txt', cur_path) 
with open(new_path, 'w') as f: 
    f.write(data) 

संपादित करें 2: एक त्वरित टिप्पणी के बारे में __file__, इस वजह से यह सहभागी और नहीं एक वास्तविक फ़ाइल से भाग गया जा रहा इंटरैक्टिव दुभाषिया में काम नहीं करेगा।

+0

में हूं, मुझे लगा कि यह इस लाइन के साथ कुछ होगा, लेकिन मैं विशेष रूप से विंडोज मशीन के लिए पूछ रहा हूं, ड्राइव अक्षर और बैकस्लाश के अतिरिक्त के रूप में मुझे यकीन है कि यह थोड़ा सा जटिल है। अब निर्दिष्ट करने के लिए सवाल को संपादित करना। – dbishop

+0

विंडोज – electrometro

+0

के लिए अपडेट किया गया थोड़ा सा पैडेंटिक नोट- आप इसे 'r'PATH' बनाना चाहते हैं या '\\' – theB

2
import os 
import os.path 
import shutil 

आप अपने वर्तमान निर्देशिका पाते हैं: एक निर्देशिका के लिए

os.chdir("..") #Go up one directory from working directory 

तो फिर तुम सभी निर्देशिकाओं का एक tupple/सूची प्राप्त कर सकते हैं,:

d = os.getcwd() #Gets the current working directory 

तो फिर तुम एक निर्देशिका बदल अप:

o = [os.path.join(d,o) for o in os.listdir(d) if os.path.isdir(os.path.join(d,o))] # Gets all directories in the folder as a tuple 

तो फिर तुम निर्देशिका आप चाहते हैं के लिए टपल खोज और है कि निर्देशिका में फ़ाइल खोल सकते हैं:

for item in o: 
    if os.path.exists(item + '\\testfile.txt'): 
    file = item + '\\testfile.txt' 

तो फिर तुम पूर्ण फ़ाइल पथ 'फ़ाइल'

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