2010-05-02 14 views
11

AppEngine में पाइथन में मूल निर्देशिका में फ़ाइल कैसे खोलें?AppEngine में पाइथन में मूल निर्देशिका में फ़ाइल कैसे खोलें?

मैं एक अजगर फ़ाइल मॉड्यूल/निम्नलिखित कोड

f = open('../data.yml') 
z = yaml.load(f) 
f.close() 

data.yml मॉड्यूल की मूल निर्देशिका में है के साथ mod.py है। मुझे मिली त्रुटि

IOError: [Errno 13] file not accessible: '../data.yml' 

मैं AppEngine SDK 1.3.3 का उपयोग कर रहा हूं।

क्या इसके लिए कोई काम है?

उत्तर

19

open फ़ंक्शन वर्तमान प्रक्रिया कार्यशील निर्देशिका के सापेक्ष संचालित होता है, न कि जिस मॉड्यूल से इसे कहा जाता है। पथ मॉड्यूल-रिश्तेदार होना चाहिए, तो ऐसा करते हैं:

import os.path 
f = open(os.path.dirname(__file__) + '/../data.yml') 
+1

मेरी राय में, यह अगर बेहतर होगा, बजाय फ़ाइल नाम श्रृंखलाबद्ध , आपने "os.path.join" का उपयोग कियाउदाहरण के लिए: खुला (os.path.join (os.path.dirname (__ file__), os.pardir, 'data.yml')) – ThatsAMorais

+0

हां। लेकिन फ़ाइल – sthiers

+0

फ़ाइल के बजाय \ __ फ़ाइल \ __ का उपयोग करना सुनिश्चित करें, वैकल्पिक रूप से, बैक-कोट्स में 'कोड' को लपेटना सुनिश्चित करें। –

3

इस सवाल का सामना करना पड़ा करने के बाद और जवाब से संतुष्ट नहीं किया जा रहा है, मैं एक अलग समाधान भर में भाग गया। जो कुछ मैं चाहता था उसे पाने के लिए मैंने निम्नलिखित लिया।

  1. os.path.dirname का उपयोग कर मौजूदा निर्देशिका का निर्धारण:

    current_directory = os.path.dirname(__file__)

  2. os.path.split का उपयोग कर मूल निर्देशिका का निर्धारण:

    parent_directory = os.path.split(current_directory)[0] # Repeat as needed

  3. किसी भी उप-निर्देशिका के साथ parent_directory में शामिल हों:

    file_path = os.path.join(parent_directory, 'path', 'to', 'file')

  4. ओपन फाइल:

    open(file_path)

एक साथ संयुक्त:

open(os.path.join(os.path.split(os.path.dirname(__file__))[0], 'path', 'to', 'file') 
संबंधित मुद्दे