2010-05-02 12 views
11

¿Cómo abrir un archivo en el directorio padre en Python en AppEngine?¿Cómo abrir un archivo en el directorio padre en python en AppEngine?

Tengo un archivo de Python módulo/mod.py con el siguiente código

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

data.yml se encuentra en el directorio padre del módulo. El error que recibo es

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

Estoy usando AppEngine SDK 1.3.3.

¿Hay un problema para esto?

Respuesta

19

La función open funciona en relación con el directorio de trabajo actual del proceso, no desde el módulo desde el que se llama. Si la ruta debe ser relativa-módulo, haga lo siguiente:

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

En mi opinión, sería mejor si, en vez de concatenar el nombre del archivo , usaste "os.path.join" Por ejemplo: abierto (os.path.join (os.path.dirname (__ file__), os.pardir, 'data.yml')) – ThatsAMorais

+0

Sí. Pero asegúrese de usar \ __ archivo \ __ en lugar del archivo – sthiers

+0

Como alternativa, asegúrese de ajustar 'code' entre comillas. –

3

haber encontrado esta pregunta y no estar satisfecho con la respuesta, me encontré con una solución diferente. Tomó lo siguiente para obtener lo que quería.

  1. determinar el directorio actual utilizando os.path.dirname:

    current_directory = os.path.dirname(__file__)

  2. Determine el directorio padre usando os.path.split:

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

  3. Ingreso PARENT_DIRECTORY con cualquier subdirectorios:

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

  4. Abrir el archivo:

    open(file_path)

combinan entre sí:

open(os.path.join(os.path.split(os.path.dirname(__file__))[0], 'path', 'to', 'file') 
Cuestiones relacionadas