2012-04-16 10 views
23

चलें कहते हैं कि तुम एक मॉड्यूल जो"हमेशा मौजूदा मॉड्यूल से संबंधित" फ़ाइल पथ बनाते हैं?

myfile = open('test.txt', 'r') 

शामिल और 'test.txt' फ़ाइल एक ही फ़ोल्डर में है। यदि आप मॉड्यूल चलाएंगे, तो फाइल सफलतापूर्वक खोली जाएगी। अब आइए कहें कि आप उस मॉड्यूल को किसी अन्य फ़ोल्डर से आयात करते हैं जो किसी अन्य फ़ोल्डर में है। उस मॉड्यूल के रूप में फ़ाइल को उसी फ़ोल्डर में नहीं खोजा जाएगा जहां वह कोड है। तो मॉड्यूल खोज फ़ाइलों को उसी फ़ोल्डर में सापेक्ष पथ के साथ कैसे बनाया जाए? "__file__" या "os.getcwd()" का उपयोग करके कई समाधान हैं, लेकिन मुझे उम्मीद है कि एक क्लीनर तरीका है, जैसे स्ट्रिंग में उसी विशेष वर्ण को खोलने के लिए आप() या फ़ाइल()।

+0

साथ 'os.getcwd()' समस्या क्या है? – cfedermann

+1

'os.getcwd()' पहले मॉड्यूल का मार्ग लौटाता है, जिसने उस मॉड्यूल को आयात किया है, या आयात किया है जो आयात किया है। पहला मॉड्यूल कई निर्देशिकाओं में ऊपर या नीचे हो सकता है। तो यह 'os.getcwd() +' कुछ/कुछ/टाइप करने वाला/आखिरकार ' –

+1

टाइप करने के लिए बहुत ही सुरुचिपूर्ण प्रतीत नहीं होता है, फिर नीचे प्रस्तावित 'sys.modules' उत्तर का प्रयास करें :) – cfedermann

उत्तर

31

समाधान __file__ उपयोग करने के लिए है और यह बहुत साफ है:

import os 

TEST_FILENAME = os.path.join(os.path.dirname(__file__), 'test.txt') 
+0

+1, वास्तव में! आप बस 'os.path आयात' भी कर सकते हैं। – Emmanuel

+0

'आयात os.path' व्यर्थ है, जब आप' ओएस आयात करते हैं ', मॉड्यूल आपके लिए' os.path 'आयात करता है ('os' उस तरह से विशेष है)। कोई 'ओएस आयात पथ' से उपयोग कर सकता है लेकिन 'ओएस' मॉड्यूल के मामले में यह आम नहीं है। यह बहुत संभव है कि उसके मॉड्यूल में पहले से ही 'आयात ओएस' है या जल्द ही इसकी आवश्यकता होगी। इसलिए, 'आयात ओएस' लगभग हमेशा सबसे अच्छा विकल्प है। – yak

+0

मुझे लगता है कि यह उतना ही साफ है जितना आप प्राप्त कर सकते हैं। कुछ और भी यह बदलने के लिए कहेंगे कि आधिकारिक पायथन दुभाषिया कैसे काम करता है। –

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