2010-05-02 31 views
11

Cách mở tệp trong thư mục mẹ trong python trong AppEngine?Cách mở tệp trong thư mục mẹ trong python trong AppEngine?

Tôi có một file python module/mod.py với đoạn mã sau

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

data.yml là trong dir mẹ của module. Lỗi tôi nhận được là

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

Tôi đang sử dụng AppEngine SDK 1.3.3.

Có công việc nào cho việc này không?

Trả lời

19

Chức năng open hoạt động liên quan đến thư mục làm việc quy trình hiện tại, không phải mô-đun được gọi. Nếu đường dẫn phải là mô-đun tương đối, hãy thực hiện điều này:

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

Theo ý kiến ​​của tôi, nó sẽ tốt hơn nếu, thay vì concatenating tên tập tin , bạn đã sử dụng "os.path.join" Ví dụ: mở (os.path.join (os.path.dirname (__ file__), os.pardir, 'data.yml')) – ThatsAMorais

+0

Có. Nhưng hãy đảm bảo sử dụng \ __ file \ __ thay cho tập tin – sthiers

+0

Cách khác, đảm bảo bọc 'mã' trong dấu ngoặc kép. –

3

Gặp phải câu hỏi này và không hài lòng với câu trả lời, tôi đã chạy qua một giải pháp khác. Phải mất những điều sau đây để có được những gì tôi muốn.

  1. Xác định thư mục hiện hành sử dụng os.path.dirname:

    current_directory = os.path.dirname(__file__)

  2. Xác định thư mục cha sử dụng os.path.split:

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

  3. Tham parent_directory với bất kỳ thư mục con:

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

  4. Mở file:

    open(file_path)

Kết hợp với nhau:

open(os.path.join(os.path.split(os.path.dirname(__file__))[0], 'path', 'to', 'file') 
Các vấn đề liên quan